- import java.util.concurrent.ArrayBlockingQueue;
- import java.util.concurrent.BlockingQueue;
- public class BlockingQueueTest {
- public static void main(String[] args){
- final BlockingQueue queue = new ArrayBlockingQueue(3);
- for(int i=0;i<2;i++){
- new Thread(){
- public void run(){
- while(true){
- try{
- Thread.sleep((long)(Math.random()*1000));
- System.out.println(Thread.currentThread().getName() + "准备放数据");
- queue.put(1);//我的问题是:怎么让这行代码和下一行代码一起执行
- System.out.println(Thread.currentThread().getName()+"已放数据,"
- +"目前队列有"+queue.size()+"个数据");
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- }
- }.start();
- }
- new Thread(){
- public void run(){
- while(true){
- try{//将此处的睡眠时间分别改为100和1000,观察运行结果
- Thread.sleep(1000);
- System.out.println(Thread.currentThread().getName()+"准备取出数据,");
- queue.take();//问题:怎么放这行代码和下一行代码一起执行。
- System.out.println(Thread.currentThread().getName()+"已经取走数据,"+
- "队列目前有"+queue.size()+"个数据");
- } catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- }
- }.start();
- }
- }
- /*
- Thread-0已经放了数据,队列目前有3个数据 //这行和下一行diamond之所以打印出了饿个数据就是因为注释中的两行代码没有一起执行
- Thread-2已经取走数据,队列目前有3个数据 //怎么才能让他们一起执行啊,让他们同步,加上synchronized(BlockingQueueTest)不行啊
- */
复制代码 你的代码应该放在代码区这样方便复制,我帮你弄了,希望有同学能帮你解决吧。 |