龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

攻克学习多线程时碰到的难题[组图]

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
接触多线程已经不少时间了,也做了不少事情,但是一直觉得用起来不那么顺手,在debug的时候,往往会比较担心在同步上出什么问题,想起"程序员最怕的是自己写的代码"这句话,觉得真是不假

      接触多线程已经不少时间了,也做了不少事情,但是一直觉得用起来不那么顺手,在debug的时候,往往会比较担心在同步上出什么问题,想起"程序员最怕的是自己写的代码"这句话,觉得真是不假.
   <!-- frame contents -->

<!-- /frame contents -->     终于有一天,我觉得是时候把这个问题弄清楚了,所以,我就在网上找相关的内容看,结果竟然是找不到在我这个阶段应该看的,不是太简单,就是一笔带过,不知所云.
      废了九牛二虎之力,终于差不多弄清楚了,其中有不少误区,以前认为的和真理相差甚大.想起自己花费的时间,真是觉得有点多,所以把它写出来,一是防止自己以后又会忘掉,二是给像我一样的似懂非懂者留下一点可以参考的东东.
      闲话少说,转入正题!
    ---------------------------------
      先从线程的创建说起.线程的创建一共有两种形式:
    ---------------------------------

      一种是继续自Thread类.Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为。要创建一个线程,程序员必须创建一个从 Thread 类导出的新类。程序员通过覆盖 Thread 的 run() 函数来完成有用的工作。用户并不直接调用此函数;而是通过调用 Thread 的 start() 函数,该函数再调用 run()。
     
      例如:

      public class Test extends Thread{
        public Test(){
        }
        public static void main(String args[]){
          Test t1 = new Test();
          Test t2 = new Test();
          t1.start();
          t2.start();
        }
        public void run(){
          //do thread's things
        }
      }

  ----------------------------
     
      另一种是实现Runnable接口,此接口只有一个函数,run(),此函数必须由实现了此接口的类实现。
     
      例如:

   

  
 

进入讨论组讨论。

      public class Test implements Runnable{
        Thread thread1;
        Thread thread2;
        public Test(){
   <!-- frame contents -->

<!-- /frame contents -->         thread1 = new Thread(this,"1");
          thread2 = new Thread(this,"2");
        }
        public static void main(String args[]){
          Test t = new Test();
  
  
精彩图集

赞助商链接