【问题标题】:In the below code, Even "synchronized" keyword is used , the threads are not synchronizing, Why? [duplicate]在下面的代码中,即使使用了“synchronized”关键字,线程也没有同步,为什么? [复制]
【发布时间】:2014-08-23 20:07:53
【问题描述】:
class A implements Runnable         //Thread class
{
        public void run()
        {
            read();
        }
        public synchronized void read()
        {
            for(int i= 0 ; i< 7 ;i++)
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
}

public class Main
{

        public static void main(String[] args)
        {
             Thread t = new Thread(new A());
             t.setName("t1");

             Thread c = new Thread(new A());
             c.setName("t2");

            t.start();
            c.start();    
}

输出:

【问题讨论】:

  • 你在两个不同的线程上调用方法

标签: java multithreading runnable synchronized


【解决方案1】:

因为它们在不同的对象上同步。线程tt 上同步,cc 上同步。

如果您创建一个共享对象f 并将synchronized(f) 放入方法中,它将按您的意愿工作。

例如,将private final static Object lock = new Object(); 放入您的A 类中,并将synchronized(lock) { // method body } 放入read() 中。

【讨论】:

  • 你能给我正确的代码吗???
  • 你能给我正确的代码吗???
【解决方案2】:

您在创建 A 对象时创建的 this 线程上同步不同的对象。要使其工作,您必须在一个对象上同步,最好是为此目的显式创建的对象。另外,一个挑剔的人,不要扩展 Thread 而是实现 Runnable。

【讨论】:

  • 你能给我正确的代码吗??\
  • @RakeshTm:请不要这样要求,因为这会让你看起来很懒惰,好像你在乞求别人为你做功课。最适合您自己先尝试创建正确的代码。如果它不起作用,那么您可以向我们展示您的尝试,我们可以为您提供帮助。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多