线程Sleep不放弃锁

来源:互联网 发布:珠江旭景佳园 网络 编辑:程序博客网 时间:2024/04/29 18:00

总结: 1. run不新启线程,还在老线程中执行,启动新线程只能start
      2. sleep不释放锁,wait释放。</strong></span>
      3. synchonrized 使用时最好为synchronized(this) {.....}

package ThreadTest;public class MockTest {public static void main(String[] args) {Test t1 = new Test() ;Thread tt =new Thread(t1) ;tt.run() ;//tt.start() ;for(int k=0;k<5;k++){t1.addA() ;    System.out.println(" Main Thread Add a: " +t1.a);}}}class  Test implements Runnable{public int  a = 0 ;public void run() {synchronized (this) {while(a<4){     System.out.println("a<4 " + Thread.currentThread().getName()+"--a..." +a);     try {Thread.sleep(1000);//     this.wait(1000) ;} catch (InterruptedException e) {e.printStackTrace();}}}System.out.println(" a>4...." + Thread.currentThread().getName());} public synchronized void addA(){ a++ ; }}


有个问题没搞清楚。。。。
1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码:通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止, 而CPU再运行其它线程,  2.run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码: 而如果直接用Run方法, 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。 

                                             
0 0