实现多线程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字符串截取操作总结
