少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 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:41 abin 閱讀(932) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
          主站蜘蛛池模板: 麟游县| 永安市| 开原市| 玛纳斯县| 宜兰县| 永靖县| 溧水县| 广东省| 庆城县| 河北区| 崇州市| 承德县| 兰溪市| 罗定市| 湛江市| 濮阳县| 清远市| 新邵县| 通山县| 明水县| 东乌珠穆沁旗| 临猗县| 隆化县| 噶尔县| 巴东县| 黑河市| 城步| 濮阳县| 玉龙| 天长市| 鄯善县| 通州市| 县级市| 仙居县| 武隆县| 易门县| 观塘区| 鄯善县| 潜山县| 廉江市| 娄底市|