一、建立干活线程
1、
2、建立干活线程和使用干活线程混合在一个Test1中:问题是一个对象有一些数据还没有初始化,而干活线程就提前执行了。
建立干活线程用Runnable,驱动线程作为类实例变量 t1,new Test1() ,启动干活线程
Test1 implements Runnable{ Thread t1=new Thread(this), public Test1() {t1.start()}}
3、
二、干活线程实现Runnable 的类(即Runnable对象)
使用干活线程,用Thread,也叫驱动线程,驱动干活线程干活。
但是有返回值得Test2线程必须用 ExecutorService的submit()方法提交,才能得到返回值。
1、 一个新驱动线程对应一个新干活线程,也可以多个新驱动线程对应对多个新干活线程。
Thread t2=new thread(new Test1)
Thread t3=new thread(new Test1)
一个对象对应一个monitor大楼,上面new Test1 三次,
有3个monitor大楼:t1.monitor 大楼,t2.monitor 大楼,:t3.monitor 大楼
2、二,三,多个新驱动线程对应一个新干活线程,反正一个新驱动线程需要干活线程。随便指定。
只有在这种情况下,多个驱动程序对应同一个对象,Synchronize 锁住对象才有意义,而且这样一个对象对应一个monitor,monitor才存在多个线程竞争特殊房间的问题。
例如:t1:看成是共享资源洗澡间,多个驱动线程t1_1,t1_2,t1_3都抢着进洗澡间,只有在这种情况下,当一个人(驱动线程t1_1)竞争到洗澡间,就去洗澡,上锁,释放锁,别人才能进去。
下面是只有一个t1.monitor 大楼
有两种情况:1》多个新驱动线程,对应一个新的干活线程
干活线程设置拥有共享数据,哪么只能建立一个新对象,供多个驱动线程去竞争共享数据。
2》多个新驱动线程,对应多个新干活线程,一个共享数据的对象。
三、干活线程继承thread。
使用干活线程,直接在构造器里 .sart 启动。
四、使用干活线程,用连接池,即线程thread对象由Executor管理。