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进行开多个线程操作