一、两个线程实现轮流打印1-100。
package lianxi;
public class PrintNumSyn implements Runnable {
private static Object lock = new Object();
private int num;
PrintNumSyn(int num) {
this.num = num;
}
@Override
public void run() {
while (num <= 100) {
synchronized (lock) {
System.out.println(Thread.currentThread() + ":" + num);
lock.notify();
num += 2;
try {
lock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws InterruptedException {
PrintNumSyn thread1 = new PrintNumSyn(1);
PrintNumSyn thread2 = new PrintNumSyn(2);
Thread t1 = new Thread(thread1);
Thread t2 = new Thread(thread2);
t1.setName("线程1");
t2.setName("线程2");
t1.start();
Thread.sleep(50);//让线程1先获得锁
t2.start();
}
}
二 、用10个线程打印1-100。
package lianxi;
class PrintThread implements Runnable {
private static Object lock = new Object();
private int num;
PrintThread(int num) {
this.num = num;
}
public static void startThread() {
synchronized (PrintThread.lock) {
PrintThread.lock.notify();
}
}
@Override
public void run() {
synchronized (lock) {
while (num <= 100) {
try {
System.out.println(Thread.currentThread() + ":" + num);
lock.wait();
num += 10;
lock.notify();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
for (int i = 1; i <= 10; i++) {
PrintThread t1 = new PrintThread(i);
Thread T = new Thread(t1);
T.start();
T.setName("线程:" + i);
Thread.sleep(20);// 保证线程安序进入wait状态
}
PrintThread.startThread();
}
}