巷尾的酒吧

            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 閱讀(286) 評論(0)  編輯  收藏 所屬分類: thread

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


          網站導航:
           
          主站蜘蛛池模板: 习水县| 上饶市| 高淳县| 通州市| 武乡县| 健康| 西平县| 塔河县| 庄浪县| 内黄县| 眉山市| 和平县| 普宁市| 潍坊市| 青田县| 东莞市| 肥东县| 昆山市| 秦皇岛市| 阿尔山市| 潞城市| 澄迈县| 兰西县| 富源县| 嘉兴市| 肃宁县| 酒泉市| 海门市| 桂平市| 怀仁县| 嘉祥县| 类乌齐县| 嵊泗县| 南丹县| 三原县| 静宁县| 花莲县| 太仓市| 汝州市| 永顺县| 南阳市|