自定义线程类继承Thread类
重写run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
public class StartThread1 extends Thread{ //线程的入口点 @Override public void run(){ //线程体 for(int i=0;i<20;i++){ System.out.println("我在听课"+i); } } public static void main(String[] args) { //main线程,主线程 //创建一个线程对象 StartThread1 t = new StartThread1(); //调用start()方法开启线程 t.start(); for(int i=0;i<2000;i++){ System.out.println("我在学多线程"+i); } } //线程不一定立即执行,CPU安排调度 }
定义MyRunnable类实现Runnable接口
实现run()方法,编写线程执行体
创建线程对象,调用start()方法启动线程
StartThread st=new StartThread();//一份资源
//多个代理,起不同的名字
new Thread(st,name:"小明").start();
new Thread(st,name:"老师").start();
new Thread(st,name:"小红").start();
public class StartThread implements Runnable{ @Override public void run(){ //run方法线程体 for(int i=0;i<20;i++) { System.out.println("我在听课"+i);} } public static void main(String[] args) { //创建runnable接口的实现类对象 StartThread st=new StartThread(); //创建线程对象,通过线程对象来开启我们的线程,代理类对象 Thread thread=new Thread(st); //启动 thread.start(); // new Thread(st).start();相当于 Thread thread=new Thread(st);和thread.start();作用 for(int i=0;i<200;i++) { System.out.println("我在看代码"+i); } } }
//模型建立:赛道距离,判断比赛是否结束, 打印胜者,龟兔赛跑开始,模拟兔子睡觉 public class RabbitAndTurtle implements Runnable{ private static String winner; @Override public void run() { for (int i = 1; i <= 100 ; i++) { //模拟兔子睡觉 if (Thread.currentThread().getName().equals("兔子")&&i%10 == 0){ try { Thread.sleep(10); } 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; // 比赛结束 } if (steps >= 100){ winner = Thread.currentThread().getName(); System.out.println("胜利者是"+winner); return true; } return false; } public static void main(String[] args) { RabbitAndTurtle rabbitAndTurtle = new RabbitAndTurtle(); new Thread(rabbitAndTurtle,"兔子").start(); new Thread(rabbitAndTurtle,"乌龟").start(); } }