当前位置:网站首页 > Java教程 > 正文

java多线程协作教程



当多个线程可以一起去解决某个问题时,如果某些部分必须在其他部分之前完成,那么就需要对线程进行协调。

在线程中调用另一个线程的join()方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。

对于以下代码,虽然b线程先启动,但是因为在b线程中调用了a线程的join()方法,b线程会等待a线程结束才继续执行,因此最后能够保证a线程的输出先于b线程的输出。

 
 
 

调用wait()使得线程等待某个条件满足,线程在等待时会被挂起,当其他线程的运行使得这个条件满足时,其他线程会调用notify()或者notifyAll()来唤醒挂起的线程。

它们都属于Object的一部分,而不属于Thread。

只能用在同步方法或者同步控制块中使用,否则会在运行时抛出。

使用wait()挂起期间,线程会释放锁。这是因为,如果没有释放锁,那么其它线程就无法进入对象的同步方法或者同步控制块中,那么就无法执行notify()或者notifyAll()来唤醒挂起的线程,造成死锁。

 
 
 

wait() 和 sleep() 的区别

  • wait() 是 Object 的方法,而 sleep() 是 Thread 的静态方法;
  • wait() 会释放锁,sleep() 不会。

java.util.concurrent 类库中提供了 Condition 类来实现线程之间的协调,可以在 Condition 上调用 await() 方法使线程等待,其它线程调用 signal() 或 signalAll() 方法唤醒等待的线程。相比于 wait() 这种等待方式,await() 可以指定等待的条件,因此更加灵活。

使用 Lock 来获取一个 Condition 对象。

 
 

                            

  • 上一篇: java爱心教程
  • 下一篇: java速成 24小时教程
  • 版权声明


    相关文章:

  • java爱心教程2024-11-29 14:26:00
  • java字符类型教程2024-11-29 14:26:00
  • 的java教程2024-11-29 14:26:00
  • java实用红石教程2024-11-29 14:26:00
  • java217教程2024-11-29 14:26:00
  • java速成 24小时教程2024-11-29 14:26:00
  • java教程土豆网2024-11-29 14:26:00
  • java安装反编译工具教程2024-11-29 14:26:00
  • java系统设计教程2024-11-29 14:26:00
  • java jquery 教程2024-11-29 14:26:00