一、线程共享数据

  a)继承Thread,那么我们可以创建很多个这样的类,但是每个这样的类都是相互不关联的,也是说我们Thread类中的内容每个创建出来的类都有一份,因此它不适合作为数据共享的线程来操作。同时由于Java继承的性,我们只能继承一个对象。

  b)使用runnable可以解决性和不能共享的问题(不是说使用runnable解决了共享问题,只是相对于创建Thread来说,它可以算的上是共享了,为了获得更精确的共享问题,它必须的使用线程同步操作)。实现了runnable接口的类比较适合用作共享数据。

  一个测试例子à证明runnable能实现数据共享,thread不能

  Thread_thread一个继承了Thread的线程

  Thread_runnable是一个时间了runnable的接口,他们在run里面有共同的方法

for(int i=0;i<20;i++){
if(ticket>0){
System.out.println(ticket);
ticket--;
}
}
thread_thread th1=new thread_thread();
thread_thread th2=new thread_thread();
thread_thread th3=new thread_thread();
th1.start();
th2.start();
th3.start();

  输入了三组321321321

  因为创建的是三个对象,每一个对象都拥有自己的一个备份

  将一个runnable作为参数,实例化三个thread对象

thread_runnable ru=new thread_runnable();
Thread th1=new Thread(ru);
Thread th2=new Thread(ru);
Thread th3=new Thread(ru);
th1.start();
th2.start();
th3.start();

  输入了32133

  虽然说着不是完整意义上的数据共享,但是相当于上述打印三组完整的数据来说,它已经实现了数据共享,我们从中也可以看到,我们只创建了一个runnable对象(数据只产生了一份),它由三个Thread调用。