[2022.11.9]进程的并发问题
package thread;
//认识并发问题 火车买票
public class testdemo3 implements Runnable {
private int ecigarette=10;
@Override
public void run(){
while (true){
if (ecigarette<=0){
break;
}
System.out.println(Thread.currentThread().getName()+"买走了第"+ecigarette--+"根电子烟");
}
}
//Class类getName()方法getName()方法在java.lang包中可用。
//getName()方法用于返回类的名称,接口,原始类型,无效类型以及由此Class对象表示的数组类。
//currentThread()方法
//currentThread()方法返回正在被执行的线程的信息。
public static void main(String[] args) {
testdemo3 th=new testdemo3();
new Thread(th,"顶针").start();
new Thread(th,"尼古丁真").start();
new Thread(th,"芙蓉王源").start();
}
}
龟兔赛跑的问题
package thread;
public class BuyCigarette implements Runnable{
@Override
//计步器
public void run(){
for (int i = 0; i <=100 ; i++) {
if(Thread.currentThread().getName().equals("芙蓉王源")){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
boolean flag=over(i);
System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
}
}
//判断是否完成
static String winner;
public boolean over(int steps){
if(winner!=null)
return true;
if (steps>=100){
winner=Thread.currentThread().getName();
System.out.println(winner+"抽到了电子烟");
System.exit(1);
}return false;
}
public static void main(String[] args) {
BuyCigarette th=new BuyCigarette();
new Thread(th,"芙蓉王源").start();
new Thread(th,"尼古丁真").start();
}
}