java 多线程Thread与Runnable的区别

来源:互联网 发布:三菱plc与伺服编程实例 编辑:程序博客网 时间:2024/05/21 23:39

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