public static void main(String[] args) {
new Thread(new MyThread(),"p1").start();
new Thread(new MyThread(),"p2").start();
}
static class MyThread implements Runnable{
public MyThread() {
super();
}
@Override
public void run() {
synchronized (MyThread.class){
for (int i = 0; i < 26; i++) {
if (Thread.currentThread().getName().equals("p1")) {
System.out.print(i+1);
MyThread.class.notifyAll();
try {
MyThread.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.print((char)('A'+i));
MyThread.class.notifyAll();
try {
MyThread.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
- 2.使用信号量Semaphore实现
static Semaphore sp1 = new Semaphore(1);
static Semaphore sp2 = new Semaphore(1);
public static void main(String[] args) throws InterruptedException {
sp2.acquire();
new Thread(new MyThread1(sp1,sp2),"p1").start();
new Thread(new MyThread2(sp1,sp2),"p2").start();
}
static class MyThread1 implements Runnable{
private Semaphore sp1;
private Semaphore sp2;
public MyThread1(Semaphore sp1,Semaphore sp2) {
super();
this.sp1 = sp1;
this.sp2 = sp2;
}
@Override
public void run() {
try {
sp1.acquire();
for (int i = 0; i < 26; i++) {
System.out.print(i);
sp2.release();
sp1.acquire();
// TimeUnit.SECONDS.sleep(3);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
}
}
}
static class MyThread2 implements Runnable{
private Semaphore sp1;
private Semaphore sp2;
public MyThread2(Semaphore sp1,Semaphore sp2) {
super();
this.sp1 = sp1;
this.sp2 = sp2;
}
@Override
public void run() {
try {
sp2.acquire();
for (int i = 0; i < 26; i++) {
System.out.print((char)('A'+i));
sp1.release();
sp2.acquire();
// TimeUnit.SECONDS.sleep(3);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
}
}
}