java多线程:18、面试题2

来源:互联网 发布:mac怎么格式化存储卡 编辑:程序博客网 时间:2024/05/21 17:50
import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Semaphore;import java.util.concurrent.SynchronousQueue;/** * 创建10个线程,依次获取生产者生成的数据 * */public class ThreadTest2 {    public static void main(String[] args) {        final SynchronousQueue<String> sq=new SynchronousQueue<>();        //信号量        final Semaphore semaphore=new Semaphore(1);        for(int i=1;i<=10;i++){            new Thread(new Runnable(){                @Override                public void run() {                    // TODO Auto-generated method stub                    try {                        semaphore.acquire();//获取信号量                        doSome(sq.take());                        semaphore.release();//释放信号量                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            }).start();        }        for(int i=1;i<=10;i++){            try {                sq.put(i+"");            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    public static void doSome(String log){        System.out.println(log+" "+System.currentTimeMillis()/1000);        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击