1、两个线程交替打印A、B各100次(使用 synchronized 关键字)
public class ThreadTest {
static int i=0;
public static void main(String[] args) throws InterruptedException {
Object thread = new Object();
new Thread(()->{
while (i<100){
synchronized (thread){
if(i %2==0 && i <100){
System.out.println("A");
i++;
}
}
}
}).start();
new Thread(()->{
while (i<100){
synchronized (thread){
if( i %2==1 && i <100){
System.out.println("B");
i++;
}
}
}
}).start();
}
}
2、三个线程交替打印A、B、C 各100次(使用 synchronized 关键字)
public class ThreadTest1 {
static Object thread = new Object();
static String leeter ="A";
public static void main(String[] args) throws InterruptedException {
new Thread(()->{
for (int i = 0; i < 100; i++) {
ThreadTest1.printA("A","B");
}
}).start();
new Thread(()->{
for (int i = 0; i < 100; i++) {
ThreadTest1.printA("B","C");
}
}).start();
new Thread(()->{
for (int i = 0; i < 100; i++) {
ThreadTest1.printA("C","A");
}
}).start();
}
private static void printA(String target , String next ) {
new Thread(()->{
synchronized (thread){
while (!leeter.equals(target)){
try {
thread.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println(target);
leeter = next;
thread.notifyAll();//这里唤醒全部线程,synchronized 有线程活性问题,notify() 只能随机唤醒一个线程
}
}).start();
}
}