`
pengcqu
  • 浏览: 771107 次
  • 性别: Icon_minigender_1
  • 来自: 未来
社区版块
存档分类
最新评论

Java多线程相关知识

阅读更多

1wait()  notify()  sleep()

sleepThread类的函数,waitnotifyObject的函数。

sleep的时候keep对象锁,wait的时候release 对象锁。

sleep时监控状态依然保持。wait进入等待池,只有针对该对象发出了notify才会进入对象锁池。

Sleep时间过了就会恢复运行,wait后等到notify了,也不一定是立即运行。

Waitnotify是非static函数,sleepThread类的static函数。

 

2stop()  destroy()  suspend()

都是Thread类的函数,都不推荐使用。

stop放弃了所有的lock,会使得对象处于一种不连贯状态。

destroy的时候如果还keep了某些资源的lock,那就死定了

suspend会继续持有所有的lock,容易发生死锁。

 

3)创建线程:

继承Thread类,override它的abstract函数run

实现Runnable接口,写run函数。

 

4)让线程跑起来:

start()函数

 

5)例子:四个线程,两个inc,两个dec,没有顺序:

public class ThreadTest {

     private int j;

     public static void main(String[] args) {

         ThreadTest tt=new ThreadTest();

         Inc inc= tt.new Inc();

         Dec dec= tt.new Dec();

        

         for(int i=0;i<2;i++){

              Thread t=new Thread(inc);

              t.start();

              t=new Thread(dec);

              t.start();

         }

     }

     private synchronized void inc(){

         j++;

         System.out.println(Thread.currentThread().getName()

+"-inc:"+j);

     }

     private synchronized void dec(){

         j--;

         System.out.println(Thread.currentThread().getName()

+"-dec:"+j);

     }

     class Inc implements Runnable{

         public void run() {

              for(int i=0;i<100;i++){

                   inc();

              }            

         }       

     }

     class Dec implements Runnable{

         public void run() {

              for(int i=0;i<100;i++){

                   dec();

              }

         }

     }

3
0
分享到:
评论
1 楼 ceasarje 2009-10-13  
沙发一个,写的不错

相关推荐

Global site tag (gtag.js) - Google Analytics