线程八大基础核心五(线程相关方法一)

在java多线程并发编程中,有八大基础核心。考考你:
看看都有哪八大基础核心呢?它们分别是:
1.创建线程的方式
2.线程启动
3.线程停止
4.线程生命周期
5.线程相关方法
6.线程相关的属性
7.线程异常处理
8.线程安全

今天我们从第五个基础核心开始:线程相关方法

2.考考你

#前情回顾
1.在java编程语言中,与线程相关的方法主要有:
1.1.Object.wait/Object.notify/Object/notifyAll
1.2.Thread.sleep/Thread.join/Thread.yield
2.需要把各个方法的作用和使用场景说清楚,需要用两篇文章进行分享

#考考你
1.你知道wait/notify/notifyAll方法的作用吗?
2.你知道notify与notifyAll方法的区别吗?
3.你知道sleep方法的作用吗?
4.你知道wait与sleep方法的区别吗?
5.你知道join方法的作用吗?
6.你知道yield方法的作用吗?

3.案例:wait/notify/notifyAll

方法简述:

wait:释放线程拥有的当前锁对象,让线程进入WAITING状态

notify:唤醒当前锁对象等待池(WaitSet)中,某一个线程

notifyAll:唤醒当前锁对象等待池(WaitSet)中,所有线程

业务描述:

1.通过wait与notify(notifyAll)实现线程协同,实现经典的生产者消费者模式

2.编写生产者,向队列中生产数据,如果队列满,生产者进行等待,并唤醒消费者进行消费

3.编写消费者,从队列中消费数据,如果队列空,消费者进行等待,并唤醒生产者进行生产

4.在主类main方法中,创建两个生产者线程进行生产

5.在主类main方法中,创建一个消费者线程进行消费

生产者:

1 /** 2 * 生产者 3 */ 4 class Producer implements Runnable{ 5 6 public void run() { 7 while(true){ 8 synchronized (ProducerConsumerDemo.LOCK){ 9 // 检查队列是否满,推荐用while而不是if 10 while(ProducerConsumerDemo.QUEUE.size() == 11 ProducerConsumerDemo.CAPACITY){ 12 // 如果队列满,则等待消费者消费 13 try { 14 System.out.println("队列满size:" +ProducerConsumerDemo.QUEUE.size()+ ",线程【" + 15 Thread.currentThread().getName() + "】正在等待消费者消费."); 16 ProducerConsumerDemo.LOCK.wait(); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 } 21 22 // 如果队列不满,则正常生产 23 ProducerConsumerDemo.QUEUE.add(1); 24 System.out.println("线程【" + Thread.currentThread().getName() + 25 "】生产了数据.当前队列size:" + ProducerConsumerDemo.QUEUE.size()); 26 27 // 唤醒消费者 28 ProducerConsumerDemo.LOCK.notifyAll(); 29 } 30 } 31 } 32 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyygzp.html