1、例子1,买车票,注意会资源冲突,重复利用
package chen.thread.demo2;
//多个线程同时操作一个对象
//买火车票的例子
public class TestThread4 implements Runnable {
//票数
private int ticketNums = 10;
@Override
public void run() {
while(true){
if(ticketNums <= 0){
break;
}
System.out.println(Thread.currentThread().getName() + "-->拿到了第" + ticketNums-- +"票");
}
}
public static void main(String[] args) {
//(1)创建runna接口的实现类对象
TestThread4 ticket = new TestThread4();
//(2)创建线程对象,通过线程对象来开启我们的线程,代理,
//同时开启了3个
new Thread(ticket,"小明").start();
new Thread(ticket,"小林").start();
new Thread(ticket,"小牛").start();
}
}
(1)注意线程可以给name
(2)实现结果如下,和系统有关
2、例子2,龟兔赛跑
package chen.thread.demo2;
public class Race implements Runnable {
//胜利者
private static String winner;
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
//模拟兔子休息
if(Thread.currentThread().getName().equals("兔子")){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//判断比赛是否结束
boolean flag = gameOver(i);
if(flag){
break;
}
System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");
}
}
//判断是否完成比赛
private boolean gameOver(int steps){
//判断是否有胜利者
if(winner != null){
return true;
}
else{
if(steps>=100) {
winner = Thread.currentThread().getName();
System.out.println("winner is" + winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
//(1)创建runna接口的实现类对象
Race race = new Race();
//(2)创建线程对象,通过线程对象来开启我们的线程,代理,
//同时开启了3个
new Thread(race,"兔子").start();
new Thread(race,"乌龟").start();
}
}