创建多线程之方式二
Runnable
package demo01;
//创建线程方式二 实现runnable接口,重写run方法 ,执行线程需要丢入runnable接口实现类,调用start方法
public class TestThread3 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.println("我在看视频***"+i);
}
}
public static void main(String[] args) {
TestThread3 testThread3=new TestThread3();
//创建线程对象,通过线程对象开启西安城,代理
// Thread thread=new Thread(testThread3);
// thread.start();
new Thread(testThread3).start();
for (int i = 0; i < 15; i++) {
System.out.println("我在学习多线程----"+i);
}
}
}
龟兔赛跑
package demo01;
public class Race implements Runnable {
private String winner;
@Override
public void run() {
for (int i = 0; i < 150; i++) {
boolean flag=gameOver(i);
if (flag) {
System.out.println("比赛结束");
break;
}
if(Thread.currentThread().getName().equals("兔子")&&i==25){
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
}
}
private boolean gameOver(int step){
if(winner!=null)
{
return true;
}{
if(step>=50){
winner=Thread.currentThread().getName();
System.out.println("胜利者为"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
Race race=new Race();
new Thread(race,"wugui").start();
new Thread(race,"兔子").start();
}
}
模拟火车抢票
package demo01;
//多个线程同时操作同一个对象
//买火车票的例子
//数据紊乱
public class TestThread4 implements Runnable {
private int tickNums=10;
@Override
public void run() {
while (true){
if(tickNums<=0){
System.out.println("票已售没");
break;}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"拿到了"+tickNums--+"票");
}
}
public static void main(String[] args){
TestThread4 testThread4=new TestThread4();
new Thread(testThread4,"线程1").start();
new Thread(testThread4,"线程2").start();
new Thread(testThread4,"线程3").start();
}
}