Synchronized

来源:互联网 发布:骷髅头音乐软件 编辑:程序博客网 时间:2024/05/21 10:21

import java.util.*;import java.util.concurrent.*;class Task{private LinkedList<Integer> list = new LinkedList<Integer>();private static int num=0;public synchronized void take(){while(num<=0){try{super.wait() ;}catch(InterruptedException e){e.printStackTrace() ;}}num--;int a=list.remove(0);System.out.println("after "+Thread.currentThread().getName()+" get="+a+" current size="+num);super.notifyAll();//希望唤醒一些等待放入的进程}public synchronized void put(int a){while(num>=10){try{super.wait() ;}catch(InterruptedException e){e.printStackTrace() ;}}num++;list.add(a);System.out.println("after "+Thread.currentThread().getName()+" put="+a+" current size="+num);super.notifyAll();//希望唤醒一些等待取出的进程}};class PutThread implements Runnable{private Task task;private final CyclicBarrier cb;public PutThread(Task task,CyclicBarrier cb){this.task=task;this.cb=cb;}public void run(){this.task.put(1);try    {cb.await();}catch (Exception e){}}}class TakeThread implements Runnable{private Task task;private final CyclicBarrier cb;public TakeThread(Task task,CyclicBarrier cb){this.task=task;this.cb=cb;}public void run(){this.task.take();try{cb.await();}catch (Exception e){}}}public class TestSyn{public static void main(String [] args){long start=(new Date()).getTime();Task t=new Task();final long begin=(new Date()).getTime();CyclicBarrier cb =new CyclicBarrier(20000,new Runnable(){public void run(){long end=(new Date()).getTime();System.out.println(end-begin);}});for(int i=0;i<10000;i++){  new Thread(new PutThread(t,cb)).start();}for(int j=0;j<10000;j++){new Thread(new TakeThread(t,cb)).start();}}}


0 0
原创粉丝点击