实现多线程2--实现Runnable接口,重写run()方法
多线程笔记 实现多线程的第二种方法: 实现Runnable接口,重写run()方法
package com.qinayu; public class TestRunnable implements Runnable{ @Override public void run() { for (int i = 0; i < 200; i++) { System.out.println("这是run多线程"); } } public static void main(String[] args) { TestRunnable t1 = new TestRunnable(); //创建Runnable接口实现类的实例对象 new Thread(t1).start(); //将此实例对象作为Thread的参数传进去 for (int i = 0; i < 200; i++) { System.out.println("这是main线程"); } } }
运行结果: 案例:模拟龟兔赛跑
package com.qinayu.test; public class Race implements Runnable { private static String winner; @Override public void run() { for (int i = 0; i <= 100; i++) { //假设起点到终点是100米的距离 boolean flag = gameOver(i); if(flag){ break; } System.out.println(Thread.currentThread().getName()+"距离终点还有"+(100-i)+"米"); } } public boolean gameOver(Integer s){ //s为跑了多少米 if(winner != null){ //说明已经有胜利者了 return true; }else{ //程序执行到这里,说明没有胜利者,那么就要判断找出胜利者 if(s >= 100){ //如果已经跑了大于等于100米,说明胜利了 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,"兔子").start(); new Thread(race,"乌龟").start(); } }
龟兔不睡觉,正常运行结果: 但若一定想让乌龟赢的比赛,那就手动添加睡眠程序,改造run()方法:
@Override public void run() { if(Thread.currentThread().getName().equals("兔子")){ //如果当前线程名称是兔子,那么我们让它休眠100ms try { Thread.sleep(6); } catch (InterruptedException e) { e.printStackTrace(); } } for (int i = 0; i <= 100; i++) { //假设起点到终点是100米的距离 boolean flag = gameOver(i); if(flag){ break; } System.out.println(Thread.currentThread().getName()+"距离终点还有"+(100-i)+"米"); } }
兔子睡觉,程序运行结果:
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
java字符串截取操作总结