巷尾的酒吧

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            64 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks
          第一種:(Thread)

          package com.abin.lee.servlet.mythread.thread;

          public class Mythread extends Thread{
           private String name;
           public Mythread(String name) {
            this.name=name;
           }
           public void run() {
            synchronized(this.name){
             System.out.println("開始時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
             System.out.println("name="+name);
             System.out.println("結束時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
           
            }
           }
           
          }



          測試代碼:

          package com.abin.lee.servlet.mythread.thread;

          public class MythreadTest {
           public static void main(String[] args) {
            Mythread mythread1=new Mythread("ManyThread");
            Mythread mythread2=new Mythread("ManyThread");
            mythread1.start();
            mythread2.start();
           }

          }




          第二種:(Runnable)

          package com.abin.lee.servlet.mythread.runnable;

          public class MyRunnable implements Runnable{
           private String name;
           public MyRunnable(String name) {
            this.name=name;
           }
           public synchronized void run(){
             System.out.println("開始時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
             System.out.println("name="+name);
             try {
              Thread.sleep(3000);
             } catch (InterruptedException e) {
              e.printStackTrace();
             }
             System.out.println("結束時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
           }
          }




          測試代碼:

          package com.abin.lee.servlet.mythread.runnable;

          public class MyRunnableTest {
           public static void main(String[] args) {
            MyRunnable myRunnable=new MyRunnable("ManyThread");
            Thread thread1=new Thread(myRunnable);
            Thread thread2=new Thread(myRunnable);
            thread1.start();
            thread2.start();
           }
          }




          第三種:(Callable)這種說明一下,這個實現多線程的方式是在JDK1.5引進的,在java.util.concurrent.Callable  這個并發包下面,并且提供同步返回結果的多線程。

          package com.abin.lee.servlet.mythread.callable;

          import java.util.concurrent.Callable;
          import java.util.concurrent.locks.Lock;
          import java.util.concurrent.locks.ReentrantLock;

          public class MyCallable implements Callable<String>{
           private String name;
           public MyCallable(String name) {
            this.name=name;
           }
           public String call() throws Exception {
            Lock lock=new ReentrantLock();
            lock.lock();
            String result="";
            try {
             System.out.println("開始時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
             System.out.println("name="+name);
             if(name.equals("ManyThread")){
              result="success";
             }else{
              result="failure";
             }
             try {
              Thread.sleep(3000);
             } catch (InterruptedException e) {
              e.printStackTrace();
             }
             System.out.println("結束時間:"+System.currentTimeMillis()+",線程名字:"+Thread.currentThread().getName());
           
            } catch (Exception e) {
             e.printStackTrace();
            }finally{
             lock.unlock();
            }

             return result;
            
           }
           
          }




          測試代碼:

          package com.abin.lee.servlet.mythread.callable;

          import java.util.concurrent.ExecutionException;
          import java.util.concurrent.ExecutorService;
          import java.util.concurrent.Executors;
          import java.util.concurrent.Future;

          import org.junit.Test;

          public class MyCallableTest {
           @Test
           public void testMyCallable() throws InterruptedException, ExecutionException{
            ExecutorService executor=Executors.newFixedThreadPool(3);
            MyCallable myCallable=new MyCallable("ManyThread");
            Future future1=executor.submit(myCallable);
            System.out.println("future1="+future1.get());
            Future future2=executor.submit(myCallable);
            System.out.println("future2="+future2.get());
            Future future3=executor.submit(myCallable);
            System.out.println("future3="+future3.get());
            
           }

          }

          測試結果:

          開始時間:1350056647659,線程名字:pool-1-thread-1
          name=ManyThread
          結束時間:1350056650661,線程名字:pool-1-thread-1
          future1=success
          開始時間:1350056650661,線程名字:pool-1-thread-2
          name=ManyThread
          結束時間:1350056653661,線程名字:pool-1-thread-2
          future2=success
          開始時間:1350056653662,線程名字:pool-1-thread-3
          name=ManyThread
          結束時間:1350056656663,線程名字:pool-1-thread-3
          future3=success

           

          posted on 2012-10-12 23:43 abing 閱讀(285) 評論(0)  編輯  收藏 所屬分類: thread

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 塘沽区| 定日县| 平山县| 临沂市| 肥东县| 广丰县| 杂多县| 西乌| 克什克腾旗| 浦城县| 东乡县| 尚志市| 庆元县| 绥化市| 岑巩县| 富顺县| 嘉禾县| 汝城县| 太湖县| 延寿县| 车致| 苍梧县| 慈利县| 黎城县| 浪卡子县| 平原县| 公主岭市| 甘德县| 诏安县| 岫岩| 天台县| 托克逊县| 耒阳市| 察隅县| 泰来县| 汨罗市| 昭平县| 衡东县| 海丰县| 潮安县| 江北区|