public class TestReadWrite {
public static void main(String[] args){
ReadWrite readWrite = new ReadWrite();
//创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(20);
long starttime = System.currentTimeMillis();
//分配2个写任务
for(int i = 0; i < 2; i++){
executorService.submit(new Runnable(){
@Override
public void run(){
readWrite.setValue("hello world:"+new Random().nextInt(100));}});}
//分配18个读任务
for(int i = 0; i < 20; i++){
executorService.submit(new Runnable(){
@Override
public void run(){
readWrite.getValue();}});}
executorService.shutdown();
while(!executorService.isTerminated()){}
long endtime = System.currentTimeMillis();
System.out.println("用时:"+(endtime-starttime));}}
线程协作
生产者消费者
//产品
public class Bread {
private int id;
private String productorName;
//容器,缓冲区
public class Contain {
//存放面包的数组
private Bread[] contain = new Bread[6];
//存放面包的位置
private int index=0;
//放面包
public synchronized void input(Bread b){while(index>5){
try {
this.wait();} catch (InterruptedException e){
e.printStackTrace();}}
contain[index]=b;
System.out.println(Thread.currentThread().getName()+"生产了"+b.getId()+"");
index++;
this.notifyAll();}
//取面包
public synchronized void output(){while(index<=0){
try {
this.wait();} catch (InterruptedException e){
e.printStackTrace();}}
index--;
Bread b = contain[index];
System.out.println(Thread.currentThread().getName()+"消费了"+b.getId()+"生产者"+b.getProductorName());
contain[index]=null;
this.notifyAll();}}
//生产
public class Product implements Runnable{
private Contain con;
public Product(Contain con){
this.con = con;}
@Override
public void run(){for(int i = 0; i < 30; i++){
con.input(new Bread(i,Thread.currentThread().getName()));}}}
//消费
public Consumer(Contain con){
this.con = con;}
@Override
public void run(){for(int i = 0; i < 30; i++){
con.output();}}}
public class Test {
public static void main(String[] args){
Contain contain = new Contain();
Product product = new Product(contain);
Consumer consumer = new Consumer(contain);
new Thread(product,"s").start();
new Thread(product,"c").start();
new Thread(consumer,"h").start();
new Thread(consumer,"l").start();}}