本文实例为大家分享了Java实现线程间通信的具体代码,供大家参考,具体内容如下
Java代码(使用了2个内部类):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package Threads;
import java.util.LinkedList;
/**
* Created by Frank
*/
public class ProdCons {
protected LinkedList<Object> 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) {
this .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();
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。