写两个线程,一个线程打印 1~ 52,另一个线程打印A~Z,
打印顺序是12A34B…5152Z;
第一种方式:
class Print{
private int flag = 1;
private int count = 1;
public synchronized void printNum(){
while(flag != 1){
//此时应该打印字母
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(2*count-1);
System.out.print(2*count);
flag = 2;
notify();
}
}
public synchronized void printChar(){
while(flag != 2){
//此时应该打印数字
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print((char)(count-1+'A'));
//继续前行
count++;
flag = 1;
notify();
}
}
public class Test3{
public static void main(String[] args) {
Print print = new Print();
new Thread(()->{
for(int i = 0;i<26;i++){
print.printNum();
}
}).start();
new Thread(()->{
for(int i = 0;i<26;i++){
print.printChar();
}
}).start();
}
}
第二种方式:
class MyThread1 extends Thread {
private Object obj;
public MyThread1(Object obj) {
this.obj = obj;
}
public void run(){
synchronized (obj){
for(int i =1; i<=52; i++){
System.out.print(i);
if(i%2 == 0) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
obj.notifyAll();
}
}
}
}
class MyThread2 extends Thread{
private Object obj;
public MyThread2(Object obj) {
this.obj = obj;
}
public void run(){
synchronized (obj){
for(int i = 0;i<26;i++){
System.out.print((char)('A' + i));
obj.notify();
try {
if(i!=25) {
obj.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Test3{
public static void main(String[] args) {
Object obj = new Object();
MyThread1 thread1 = new MyThread1(obj);
MyThread2 thread2 = new MyThread2(obj);
thread1.start();
thread2.start();
}
}