问题:Java两个线程,一个输出字母,另一个输出数字,如何能得到1A2B3C4D…(除文中提到的方法肯定还有其它方法)
方法一:LockSupport
public class TestThread {
private static char[] data1 = {
'1','2','3','4','5','6','7'};
private static char[] data2 = {
'a','b','c','d','e','f','g'};
private static Thread t1,t2;
public static void main(String[] args) {
t1 = new Thread(
()->{
for(char temp : data1){
System.out.println(temp);
LockSupport.unpark(t2);//唤醒t2
LockSupport.park();//挂起当前线程
}
}
);
t2 = new Thread(
()->{
for(char temp : data2){
LockSupport.unpark(t1);//唤醒t1
System.out.println(temp);
LockSupport.park()//挂起当前线程
}
}
);
t1.start();
t2.start();
}
}
方法二:volatile + 自旋等待
public class TestThread {
private static char[] data1 = {
'1','2','3','4','5','6','7'};
private static char[] data2 = {
'a','b','c','d','e','f','g'};
private static Thread t1,t2;
private static volatile int currentThreadId = 1;
public static void main(String[] args) {
t1 = new Thread(
()->{
for(char temp : data1