創建線程的多種方式
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);
}
}