Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用两个线程顺序调用两个不同函数时的Notify/Wait问题_Java_Multithreading_Synchronization - Fatal编程技术网

Java 使用两个线程顺序调用两个不同函数时的Notify/Wait问题

Java 使用两个线程顺序调用两个不同函数时的Notify/Wait问题,java,multithreading,synchronization,Java,Multithreading,Synchronization,我在同步同一对象上的函数时遇到问题。在我的主类中,我有一个按钮,当按下该按钮时,应该从一个不同的类中按顺序启动两个函数。第一个线程运行良好。我想第二个会陷入僵局,但我知道怎么做。但是,当我为第二个线程指定超时时,它会触发。有人能帮我了解一下通知/等待的情况吗 public void actionPerformed(ActionEvent ae) { t = new Thread () { public void run ()

我在同步同一对象上的函数时遇到问题。在我的主类中,我有一个按钮,当按下该按钮时,应该从一个不同的类中按顺序启动两个函数。第一个线程运行良好。我想第二个会陷入僵局,但我知道怎么做。但是,当我为第二个线程指定超时时,它会触发。有人能帮我了解一下通知/等待的情况吗

public void actionPerformed(ActionEvent ae)
    {
        t = new Thread () 
        {
            public void run ()
            {
                synchronized(this)
                {
                    one();
                    notify();
                }
            }
        };
        thr = new Thread () 
        {
             public void run ()
             {
                 synchronized (this)
                 {
                    try
                    {
                        wait();
                        two();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                 }
             }
         };
        thr.start();
        t.start();
    }

t或thr是否首先进入同步段是一个竞赛条件。t可以在thr等待之前通知。

t或thr是否首先进入同步部分是一种竞争条件。t可以在thr等待之前通知。

t或thr是否首先进入同步部分是一种竞争条件。t可以在thr等待之前通知。

t或thr是否首先进入同步部分是一种竞争条件。t无法在thr等待之前通知

我在同步同一对象上的函数时遇到问题

问题是您没有在同一个对象/锁上同步,因为每个
synchronized(this)
中的
this
都引用了
线程的不同实例:

  • 来自
    t
  • 一个来自
    thr
为避免此类问题,请创建显式锁对象,并将其传递给线程

我在同步同一对象上的函数时遇到问题

问题是您没有在同一个对象/锁上同步,因为每个
synchronized(this)
中的
this
都引用了
线程的不同实例:

  • 来自
    t
  • 一个来自
    thr
为避免此类问题,请创建显式锁对象,并将其传递给线程

我在同步同一对象上的函数时遇到问题

问题是您没有在同一个对象/锁上同步,因为每个
synchronized(this)
中的
this
都引用了
线程的不同实例:

  • 来自
    t
  • 一个来自
    thr
为避免此类问题,请创建显式锁对象,并将其传递给线程

我在同步同一对象上的函数时遇到问题

问题是您没有在同一个对象/锁上同步,因为每个
synchronized(this)
中的
this
都引用了
线程的不同实例:

  • 来自
    t
  • 一个来自
    thr


为避免此类问题,请创建显式锁定对象,并将其传递给线程。

您的标题过于笼统。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。这是有道理的。我想,如果先启动thr,它将在t开始之前等待@JJF这一点的意义在于,
o.notify()
不会做任何事情,除非其他线程已经在
o.wait()
调用中等待。我理解notify不会做任何事情,除非另一个线程正在等待,但是如果首先启动thr,它不会等待t来进行调用吗@jameslarge@trevalexandro,Re,“…如果先启动thr,它是否会等待…”这是一场比赛。当主线程在调用
t.start()
之前调用
thr.start()
时,这可能会给
thr
线程带来一点优势,但这并不保证
thr
线程会赢得比赛。哦,好吧,我现在明白了。我在想,我们应该先等一等。但是,这两个线程将同时运行。如何保证一个线程首先获取监视器?我知道启动时可以让一个线程休眠,但我想明确地处理@jameslargeThat。我想,如果先启动thr,它将在t开始之前等待@JJF这一点的意义在于,
o.notify()
不会做任何事情,除非其他线程已经在
o.wait()
调用中等待。我理解notify不会做任何事情,除非另一个线程正在等待,但是如果首先启动thr,它不会等待t来进行调用吗@jameslarge@trevalexandro,Re,“…如果先启动thr,它是否会等待…”这是一场比赛。当主线程在调用
t.start()
之前调用
thr.start()
时,m