03.30 java 多线程Thread与Runnable的区别

1.Runnable适合多线程操作同一资源。

2.Runnable接口可以避免java单继承带来的局限

3.Runnable增强代码健壮性,代码被多个线程共享

测试:

[java] view plain copy

package main.uitls;

publicclass Demo {

publicstaticvoid 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{

publicint num = 5;

publicvoid run() {

for(int i=100;i > 0;i--){

if(num>0){

System.out.println("当前剩余票数:"+num--);

}

}

}

}

class MyRunnable implements Runnable{

publicint num = 5;

publicvoid run() {

for(int i=100;i > 0;i--){

if(num>0){

System.out.println("当前剩余票数:"+num--);

}

}

}

}

当使用Thread时,多个线程之间数据没有共享,返回的结果为(每次运行结果可能不同)

[html] view plain copy

当前剩余票数:5

当前剩余票数:4

当前剩余票数:3

当前剩余票数:5

当前剩余票数:2

当前剩余票数:5

当前剩余票数:1

当前剩余票数:4

当前剩余票数:3

当前剩余票数:2

当前剩余票数:4

当前剩余票数:1

当前剩余票数:3

当前剩余票数:2

当前剩余票数:1

当使用Runnable时县城之间数据共享:

[java] view plain copy

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();

结果为:

[html] view plain copy

当前剩余票数:5

当前剩余票数:3

当前剩余票数:4

当前剩余票数:1

当前剩余票数:2