---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
Java.util.concurrent包
LinkedBlockingQueue 容量没有上边界,但是,可以选择指定最大容量。
LinkedBlockingDeque 是一个双端的版本
ArrayBlockingQueue 在构造时需要指定容量,并且有一个可选的参数来指定是否需要公平性。
利用阻塞队列实现线程的同步通信:
(还是那到题目,主线程循环10次,子线程循环100次,如此往复)
原理:利用两个阻塞队列,一个空,一个满,容量都为1
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ArrayBlockingDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
final BlockingQueue bq1 = new ArrayBlockingQueue(1);
final BlockingQueue bq2 = new ArrayBlockingQueue(1);
bq1.put(1);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
bq1.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < 10; i++) {
System.out.println("sub is running" + i);
}
try {
bq2.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
while (true) {
bq2.put(1);
for (int j = 0; j < 20; j++) {
System.out.println("main is running" + j);
}
bq1.take();
}
}
}
小结:注意,匿名构造函数运行时机是在所有构造方法之前,(创建几个对象,匿名构造方法就会运行几次)
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------