多線程筆記(1)

創建線程的多種方式

1.實現Runnable接口

demo1類實現了Runnable接口

package com.concur.dlutzy;

public class demo1 implements Runnable{
       @Override
       public void run() {
	         while(true){
	        	 System.out.println("thread is running");
	         }	
       }
       public static void main(String[] args){
    	   Thread thread=new Thread(new demo1());
    	   thread.start();
       }
}

2.繼承Thread類

demo2繼承Thread類

package com.concur.dlutzy;

public class demo2 extends Thread{
       @Override
    public void run() {
    	 while(true){
    		 System.out.println("Thread is running");
    		 try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 }
    	
    }
    public static void main(String[] args){
    	demo2 d=new demo2();
    	d.start();
    }
}

3.匿名內部類

使用匿名內部類,實現Runnable接口和Thread類

package com.concur.dlutzy;

public class demo3 {	
	public static void main(String[] args) {		
		new Thread() {
			public void run() {
				System.out.println("thread start ..");
			};
		}.start();
				
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("thread start ..");
			}
		}).start();
				
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("runnable");
			}
		}) {
			public void run() {
				System.out.println("sub");
			};
		}.start();	
	}

}

輸出結果爲:

thread start ..
thread start ..
sub

4.帶返回值的線程

實現Callable接口,再用FutureTask接口封裝callable接口,並傳遞給Thread,返回值可調用FutureTask的get()函數返回。

package com.concur.dlutzy;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class demo4 implements Callable<Integer>{
	@Override
	public Integer call() throws Exception {
		System.out.println("thread is running...");
		Thread.sleep(1000);
		return 1;
	}
       public static void main(String[] args) throws Exception{
		demo4 demo4=new demo4();
		FutureTask<Integer> task=new FutureTask<>(demo4);
		Thread thread=new Thread(task);
	    thread.start();
	    Integer reslut=task.get();
	    System.out.println("線程執行的結果爲:"+reslut);
	}
}

輸出結果爲:

thread is running...
線程執行的結果爲:1

5.定時器

使用Timer類實現多線程任務

package com.concur.dlutzy;

import java.util.Timer;
import java.util.TimerTask;

public class demo5 {
        public static void main(String[] args) {
			Timer timer=new Timer();
			timer.schedule(new TimerTask() {			
				@Override
				public void run() {
					System.out.println("thread is running...");					
				}
			}, 0, 1000);
		}
}

6.線程池的實現

package com.concur.dlutzy;

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

public class demo6 {
       public static void main(String[] args) {
		ExecutorService threadpool=Executors.newCachedThreadPool();
		for(int i=0;i<10;i++){
		   threadpool.execute(new Runnable() {		
			@Override
			public void run() {
				System.out.println(Thread.currentThread().getName()+"is running");				
			}
		});	
		}			
	}
}

7.使用lambda表達式進行並行計算

package com.concur.dlutzy;

import java.util.Arrays;
import java.util.List;


public class demo7 {
       public static int add(List<Integer> values){
    	   return values.parallelStream().mapToInt(i->i).sum();
       }
       public static void main(String[] args) {
		List<Integer> list=Arrays.asList(1,2,3,4,5);
		int result=add(list);
		System.out.println("result is "+result);
	}
}







發佈了51 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章