1.Runnable适合多线程操作同一资源。
2.Runnable接口可以避免java单继承带来的局限
3.Runnable增强代码健壮性,代码被多个线程共享
测试:
package main.uitls;
public class Demo {
public static void main(String[] arg0){
Mythread m1 = new Mythread();
Mythread m2 = new Mythread();
Mythread m3 = new Mythread();
m1.start();
m2.start();
m3.start();
/*MyRunnable myRunnable =new MyRunnable();
Thread m1 = new Thread(myRunnable);
Thread m2 = new Thread(myRunnable);
Thread m3 = new Thread(myRunnable);
m1.start();
m2.start();
m3.start();*/
}
}
class Mythread extends Thread{
public int num = 5;
public void run() {
for(int i=100;i > 0;i--){
if(num>0){
System.out.println("当前剩余票数:"+num--);
}
}
}
}
class MyRunnable implements Runnable{
public int num = 5;
public void run() {
for(int i=100;i > 0;i--){
if(num>0){
System.out.println("当前剩余票数:"+num--);
}
}
}
}
当使用Thread时,多个线程之间数据没有共享,返回的结果为(每次运行结果可能不同)
当前剩余票数:5
当前剩余票数:4
当前剩余票数:3
当前剩余票数:5
当前剩余票数:2
当前剩余票数:5
当前剩余票数:1
当前剩余票数:4
当前剩余票数:3
当前剩余票数:2
当前剩余票数:4
当前剩余票数:1
当前剩余票数:3
当前剩余票数:2
当前剩余票数:1
当使用Runnable时县城之间数据共享:
MyRunnable myRunnable =new MyRunnable();
Thread m1 = new Thread(myRunnable);
Thread m2 = new Thread(myRunnable);
Thread m3 = new Thread(myRunnable);
m1.start();
m2.start();
m3.start();
结果为:
当前剩余票数:5
当前剩余票数:3
当前剩余票数:4
当前剩余票数:1
当前剩余票数:2