Java通过wait()和notifyAll()方法实现线程间通信

网友投稿 181 2023-05-25


Java通过wait()和notifyAll()方法实现线程间通信

本文实例为大家分享了java实现线程间通信的具体代码,供大家参考,具体内容如下

Java代码(使用了2个内部类):

package Threads;

import java.util.LinkedList;

/*http://*

* Created by Frank

*/

public class ProdCons {

protected LinkedList list = new LinkedList<>();

protected int max;

protected boolean done = false;

public static void main(String[] args) throws InterruptedException {

ProdCons prodCons = new ProdCons(100, 3, 4);

Thread.sleep(5 * 1000);

synchronized (prodCons.list) {

prodCons.done = true;

try {

prodCons.notifyAll();

} catch (Exception ex) {

}

}

}

private ProdCons(int maxThreads, int nP, int nC) {

tKMCKwtwUYBhis.max = maxThreads;

for (int i = 0; i < nP; i++) {

new Producer().start();

}

for (int i = 0; i < nC; i++) {

new Consumer().start();

}

}

class Producer extends Thread {

public void run() {

while (true) {

Object justProduced = null;

try {

justProduced = getObj();

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (list) {

while (list.size() == max) {

try {

list.wait();

} catch (InterruptedException e) {

System.out.println("Producer INTERRUPTED");

}

}

list.addFirst(justProduced);

list.notifyAll();

System.out.println("Produced 1;List size now " + list.size());

if (done) {

break;

}

}

}

}

}

class Consumer extends Thread {

public void run() {

while (true) {

Object object = null;

synchronized (list) {

if (list.size() == 0) {

try {

list.wait();

} catch (InterruptedException e) {

System.out.println("Consumer INTERRUPTED");

}

}

if (list.size() > 0) {

object = list.removeLast();

}

list.notifyAll();

System.out.println("List size now " + list.size());

if (done) {

break;

}

}

if (null != object) {

System.out.println("Consuming object " + object);

}

}

}

}

private Object getObj() throws InterruptedException {

Thread.sleep(1000);

return new Object();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java使用join方法暂停当前线程
下一篇:spring boot如何添加拦截器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~