//创建线程方法一:继承Thread类,重写run()方法,调用start开启线程// 线程开启不一定立即执行,由cpu调度执行publicclassTestThread1extendsThread{@Overridepublicvoidrun(){// run方法体for(int i =0; i <20; i++){System.out.println("我在看代码"+i);}}publicstaticvoidmain(String[] args){// main线程,主线程// 创建一个线程对象TestThread1 testThread1 =newTestThread1();// 调用start()方法开启线程 //用start开启线程:两个线程是同时进行的// 如果调用run()方法,则是有先后顺序的
testThread1.start();for(int i =0; i <20; i++){System.out.println("我在学习多线程"+i);}}}
方法二:实现runnable接口
//创建线程方式2://实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法//可以实现多个线程来调用实体类publicclassTestThread3implementsRunnable{@Overridepublicvoidrun(){// run方法体for(int i =0; i <20; i++){System.out.println("我在看代码"+i);}}publicstaticvoidmain(String[] args){// 创建runnabl接口的实现类对象TestThread3 testThread3 =newTestThread3();// 创建线程对象,通过线程对象来开启我们的线程,代码Thread thread =newThread(testThread3);
thread.start();// 简写为: new Thread(testThread3).start();for(int i =0; i <20; i++){System.out.println("我在学习多线程"+i);}}}
案例:模拟龟兔赛跑
//模拟龟兔赛跑publicclassReceimplementsRunnable{// 胜利者privatestaticString winner;@Overridepublicvoidrun(){for(int i =0; i <100; i++){// 模拟兔子休息if(Thread.currentThread().getName().equals("兔子")&& i%10==0){try{Thread.sleep(50);}catch(InterruptedException e){
e.printStackTrace();}}// 判断比赛是否结束boolean flag =gameOver(i);if(flag){break;}System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");}}// 判断是否完成比赛privatebooleangameOver(int steps){//判断是否有胜利者if(winner!=null){//有胜利者了returntrue;}else{if(steps ==99){
winner =Thread.currentThread().getName();System.out.println("winner is "+winner);}}returnfalse;}publicstaticvoidmain(String[] args){Rece rece =newRece();newThread(rece,"兔子").start();newThread(rece,"乌龟").start();}}
1.线程的创建## 方法一:继承Thread类//创建线程方法一:继承Thread类,重写run()方法,调用start开启线程// 线程开启不一定立即执行,由cpu调度执行public class TestThread1 extends Thread{ @Override public void run() {// run方法体 for (int i = 0; i < 20; i++) { System.out.pr