巴彦淖尔 网站建设,网站做优化有什么好处,宁波小程序开发,成都网站建设是什么意思目录
主要方法
1、主程序 2、生产者
3、消费者
4、中间队列#xff08;主要代码#xff09;
5、执行结果 主要方法
wait(); 线程等待notify(); 通知一个等待的线程notifyAll(); 通知所有等待的线程
1、主程序
package xyz.jangle.thread.test.n2_3.synccondition;
/…目录
主要方法
1、主程序 2、生产者
3、消费者
4、中间队列主要代码
5、执行结果 主要方法
wait(); 线程等待notify(); 通知一个等待的线程notifyAll(); 通知所有等待的线程
1、主程序
package xyz.jangle.thread.test.n2_3.synccondition;
/*** * 使用两个线程模拟生产者和消费者执行任务。* 1、生产者将队列填充满之后会通知消费者进行消费。应该是等待消费者进行消费* 2、消费者将队列消费为空之后会通知生产者生产。应该是等待生产者进行生产2024年1月3日10:10:16* * 此处共同使用了EventStorage的对象锁也就是synchronized方法锁使用notify()方法进行通知。* author jangle* email janglejangle.xyz* time 2020年7月16日 下午10:19:19* */
public class M {public static void main(String[] args) {EventStorage e new EventStorage();Producer p new Producer(e); // 生产者线程Consumer c new Consumer(e); // 消费者线程new Thread(p).start();new Thread(c).start();}}2、生产者
package xyz.jangle.thread.test.n2_3.synccondition;
/*** author jangle* email janglejangle.xyz* time 2020年7月16日 下午10:16:21* */
public class Producer implements Runnable {private EventStorage storage;public Producer(EventStorage storage) {super();this.storage storage;}Overridepublic void run() {for(int i0;i100;i) {storage.set();}}}3、消费者
package xyz.jangle.thread.test.n2_3.synccondition;/*** author jangle* email janglejangle.xyz* time 2020年7月16日 下午10:18:00* */
public class Consumer implements Runnable {private EventStorage storage;public Consumer(EventStorage storage) {super();this.storage storage;}Overridepublic void run() {for (int i 0; i 100; i)storage.get();}}4、中间队列主要代码
此处共同使用了EventStorage的对象锁也就是synchronized方法锁使用notify()方法进行通知。
package xyz.jangle.thread.test.n2_3.synccondition;import java.util.Date;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.TimeUnit;/*** author jangle* email janglejangle.xyz* time 2020年7月16日 下午10:04:56* */
public class EventStorage {private int maxSize;private QueueDate storage;public EventStorage() {maxSize 10;storage new LinkedListDate();}public synchronized void set() {while(storage.size() maxSize) {try {System.out.println(生产满);wait();} catch (InterruptedException e) {e.printStackTrace();}}try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}storage.offer(new Date());System.out.printf(Set: %d,storage.size());notify();}public synchronized void get() {while(storage.size() 0) {try {System.out.println(消费完);wait();} catch (InterruptedException e) {e.printStackTrace();}}try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}String string storage.poll().toString();System.out.printf(Get: %d:%s \n,storage.size(),string);notify();}}5、执行结果
Set: 1Set: 2Set: 3Set: 4Set: 5Set: 6Set: 7Set: 8Set: 9Set: 10生产满
Get: 9:Wed Jan 03 14:37:43 CST 2024
Get: 8:Wed Jan 03 14:37:43 CST 2024
Get: 7:Wed Jan 03 14:37:43 CST 2024
Get: 6:Wed Jan 03 14:37:43 CST 2024
Get: 5:Wed Jan 03 14:37:43 CST 2024
Get: 4:Wed Jan 03 14:37:43 CST 2024
Get: 3:Wed Jan 03 14:37:43 CST 2024
Get: 2:Wed Jan 03 14:37:43 CST 2024
Get: 1:Wed Jan 03 14:37:43 CST 2024
Get: 0:Wed Jan 03 14:37:43 CST 2024
消费完
Set: 1Set: 2Set: 3Set: 4Set: 5Set: 6Set: 7Set: 8Set: 9Set: 10生产满
Get: 9:Wed Jan 03 14:37:43 CST 2024
Get: 8:Wed Jan 03 14:37:43 CST 2024
Get: 7:Wed Jan 03 14:37:43 CST 2024
Get: 6:Wed Jan 03 14:37:43 CST 2024
Get: 5:Wed Jan 03 14:37:43 CST 2024
Get: 4:Wed Jan 03 14:37:43 CST 2024
Get: 3:Wed Jan 03 14:37:43 CST 2024
Get: 2:Wed Jan 03 14:37:43 CST 2024
Get: 1:Wed Jan 03 14:37:43 CST 2024
Get: 0:Wed Jan 03 14:37:43 CST 2024
消费完
Set: 1Set: 2Set: 3Set: 4Set: 5Set: 6Set: 7Set: 8Set: 9Set: 10生产满
Get: 9:Wed Jan 03 14:37:43 CST 2024
Get: 8:Wed Jan 03 14:37:43 CST 2024
Get: 7:Wed Jan 03 14:37:43 CST 2024
Get: 6:Wed Jan 03 14:37:43 CST 2024
Get: 5:Wed Jan 03 14:37:43 CST 2024
Get: 4:Wed Jan 03 14:37:43 CST 2024
Get: 3:Wed Jan 03 14:37:43 CST 2024
Get: 2:Wed Jan 03 14:37:43 CST 2024
Get: 1:Wed Jan 03 14:37:43 CST 2024
Get: 0:Wed Jan 03 14:37:43 CST 2024
消费完
...
...
...