码迷,mamicode.com
首页 > 编程语言 > 详细

带你玩转java多线程系列 二 Thread 和 Runnable

时间:2016-05-09 18:20:08      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

Thread 和 Runnable

1 Runnable是接口,而Thread是继承,可以同时实现多个接口,但是不能同时继承多个类
2 Runnable比Thread灵活的多
 
当我们使用Runnable测试多线程非常简单,因为Runnable是对Thread的进一步解耦
我们首先建立一个类记做为Model,实现Runnable接口,在类里建立一个实例变量,接着覆盖run方法。
我们重新建立一个含有main函数的类,在该类中我们首先建立一个Model类型的实例变量model,接着将该Runnable类的实例
作为参数传递给Thread类型对象,并且调用Thread类的start方法。
public class teach1 {

    public static void main(String[] args) {

        Model model = new Model();

        new Thread(model).start();

        new Thread(model).start();

    }

}

class Model implements Runnable{

    int num = 20;

 

    @Override

    public void run() {

        // TODO Auto-generated method stub

        while(num>0){

            System.out.println(Thread.currentThread().getName()+" "+num);

            num--;

        }

    }

}

 

运行结果如下
Thread-0 20
Thread-0 19
Thread-0 18
Thread-1 20
Thread-0 17
Thread-0 15
Thread-1 16
Thread-0 14
Thread-0 12
Thread-0 11
Thread-0 10
Thread-0 9
Thread-0 8
Thread-0 7
Thread-1 13
Thread-1 5
Thread-1 4
Thread-1 3
Thread-1 2
Thread-1 1
Thread-0 6
显然出现了线程安全问题,在系列三中我将写出synchronized的解决方法
假如你使Model继承Thread显然你在想在其他类里来实验java的多线程安全显然是非常难的,因为继承Thread耦合度非常的高。无法再另一个新的类
对该成员变量num进行开多个线程操作 真的发现如果继承Thread类无法进行安全性实验啊  兄弟们给指点一下啊
class Model extends Thread{

    int num = 20;

 

    @Override

    public void run() {

        // TODO Auto-generated method stub

        while(num>0){

            System.out.println(Thread.currentThread().getName()+" "+num);

            num--;

        }

    }

}

我怎么想也不能再另一个类里对该类的成员变量num进行开多个线程操作

带你玩转java多线程系列 二 Thread 和 Runnable

标签:

原文地址:http://www.cnblogs.com/winAlaugh/p/5474734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!