1、使用 synchronized配合 notify和 wait实现
其他相关学习:synchronized 和 volatile 区别、两者区别2、synchronized相关面试题总结
1) 两个线程轮流打印数字
num1 = [1,3,5,7]
nums2= [2,4,6,8]
输出结果:1,2,3,4,5,6,7,8
/*
*两个线程使用锁打印数组
*/
public class PrintNumberByTwoThread{
private Object obj = new Object();
int[] num1 = [1,3,5,7];
int[] num2 = [2,4,6,8];
Thread t1 = new Thread(new Runable() {
@Override
public void run(){
for(int i = 0; i < num1.length; i++){
synchronized(obj){
try{
System.out.println(num1[i] + ",");
obj.notify();
obj.wait();
}
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
});
Thread t2 = new Thread(new Runable() {
@Override
public void run() {
for(int i = 0;i < num2.length ;i++) {
synchronized(obj) {
try{
if(i != num2.length - 1)
System.out.println(num2[i] + ",");
else
System.out.println(num2[i]);
obj.notify();
obj.wait();
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
});
public void startThreads() throws InterruptedException {
t1.start();
Thread.sleep(20);
t2.start();
}
public static void main(String[] args) throws InterrupedExcetpion {
PrintNumberByTwoThread instance = new PrintNumberByTwoThread();
instance.startThreads();
}
}