1.java多线程编程少不了使用线程池,线程池相关的工具类所在jdk包,java.util.concurrent
2.使用示例
demo1
public class ThreadPoolDemo {
/*
本示例使用线程池实现两个线程交替打应数字,直到10
*/
private static Object obj1 = new Object();
private static int num = 0;
public static void main(String[] args){
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 2, 10000, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
//打印奇数线程
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
System.out.println("奇数run");
while (true){
synchronized (obj1){
if(num > 10){
break;
}
System.out.println("奇数抢到" + num);
if(num/2 != 0){
System.out.println("奇:" + num);
num++;
obj1.notifyAll();
}else{
try {
System.out.println("奇数线程等待");
obj1.wait(); //wait会让出锁;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
});
//打印偶数线程
threadPoolExecutor.submit(new Runnable() {
@Override
public void run() {
System.out.println("偶数run");
while(true){
synchronized (obj1){
if(num > 10){
break;
}
System.out.println("偶数抢到" + num);
if(num/2 == 0){
System.out.println("偶:" + num);
num++;
obj1.notifyAll();
}else{
try {
System.out.println("偶数线程等待");
obj1.wait(); //wait会让出锁;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
});
}
}
意外发生了,我发现我随手写的代码是垃圾,下面是运行结果
分析一下结果