这么解释问题吧:
1。单进程单线程:一个人在一个桌子上吃菜。
2。单进程多线程:多个人在同一个桌子上一起吃菜。
3。多进程单线程:多个人每个人在自己的桌子上吃菜。
Thread类的相关操作
current Thread( )
获取当前执行当前线程的对象
isAlive()当前线程是否存在
sleep()当前线程睡眠时间 参数单位是毫秒
getId()获得当前线程的唯一标识
yieId( ) 释放当前线程的唯一标识
interrupted()停止线程执行
setPriority()设置优先级,优先级越高,优先执行的几率越大,取值1-10
stop()强制中断当前线程
suspend()暂停当前线程的执行
首先 创建厨师类
public class o1 implements Runnable {
private o1o2 oo1;
public o1(o1o2 oo1) {
super();
this.oo1 = oo1;
}
// 重写Runnable的run方法
@Override
public void run() {
// 循环执行
while (true) {
oo1.o1();
try {
// 睡一下,控制台打印速度慢一点
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
创建顾客类
public class o2 implements Runnable {
private o1o2 oo2;
public o2(o1o2 oo2) {
super();
this.oo2 = oo2;
}
// 重写Runnable的run方法
@Override
public void run() {
while(true){
oo2.o2();
try {
// 睡一下,控制台打印速度慢一点
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
创建测试类
public class o1o2 {
// 设置厨师的开始变量信息
static int i = 0;
public synchronized void o1() {
// 如果厨师做了20份糖醋排骨,就等待顾客吃,否则厨师可以抢来继续做
if (i == 20) {
try {
wait();
} catch (Exception e) {
e.printStackTrace();
}
}
i++;
System.out.println("厨师" + i + "糖醋排骨");
notify();
}
public synchronized void o2() {
// 如果厨师做了0份糖醋排骨,顾客就等待厨师做,否则顾客可以抢来继续吃
if (i == 0) {
try {
wait();
} catch (Exception e) {
e.printStackTrace();
}
}
i--;
System.out.println("糖醋排骨,还剩" + i + "份");
notify();
}
public static void main(String[] args) {
o1o2 oo = new o1o2();
o1 oo1 = new o1(oo);
o2 oo2 = new o2(oo);
Thread t1 = new Thread(oo1);
Thread t2 = new Thread(oo2);
// 使t1处于就绪状态
t1.start();
// 使t1处于就绪状态
t2.start();
}
}
控制台输出
厨师1糖醋排骨
糖醋排骨,还剩0份
厨师1糖醋排骨
厨师2糖醋排骨
糖醋排骨,还剩1份
厨师2糖醋排骨
厨师3糖醋排骨
糖醋排骨,还剩2份
厨师3糖醋排骨
厨师4糖醋排骨
厨师5糖醋排骨
糖醋排骨,还剩4份
厨师5糖醋排骨
厨师6糖醋排骨
糖醋排骨,还剩5份
厨师6糖醋排骨
厨师7糖醋排骨