多线程小练习
public class ThreadText2 {
public static void main(String[] args) {
Num num = new Num(0);
//定义两个线程
Thread t1 = new Thread(new odd(num));
Thread t2 = new Thread(new even(num));
//修改线程名字
t1.setName("输出奇数:---->");
t2.setName("输出偶数:---->");
//启动线程
t1.start();
t2.start();
}
}
//输出奇数
class odd implements Runnable{
private Num num;
public odd(Num num) {
this.num = num;
}
@Override
public void run() {
synchronized (num){
while (true){
// 值为偶数等待,同时释放锁
if (num.getI()%2==0){
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 输出奇数
System.out.println(Thread.currentThread().getName()+"输出"+num.getI());
num.setI(num.getI()+1);
// 唤醒锁
num.notifyAll();
}
}
}
}
//输出偶数
class even implements Runnable{
private Num num;
public even(Num num) {
this.num = num;
}
@Override
public void run() {
synchronized (num){
while (true){
if (num.getI()%2!=0){
try {
num.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"输出"+num.getI());
num.setI(num.getI()+1);
num.notifyAll();
}
}
}
}
//一个带有数字类型的类
class Num{
int i;
public Num(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}