1.實現runnable介面,傳入thread
class myrunnable implements runnable
}
thread thread1 = new thread(new myrunnable());
thread1.start();
2.實現thread的run方法
class myrunnable implements runnable
}
mythread thread2 = new mythread();
thread2.start();
注:如果乙個thread既實現了自己的run方法,初始化的時候又傳入了runnable物件,後者優先
3.實現callable介面,傳入futuretask,futuretask傳給thread
class mycallable implements callable
}
futuretaskfuturetask = new futuretask<>(new mycallable());
thread thread3 = new thread(futuretask);
thread3.start();
注:callable區別於runnable在於有返回值
以下提供乙個小栗子分析runnable和callable的區別
private void executortest() catch (executionexception e) catch (interruptedexception e)
}private void addrunnable(executorservice service) throws executionexception, interruptedexception
});system.out.println("runnable的result:" + result.get());
}private void addcallable(executorservice service) throws executionexception, interruptedexception
});system.out.println("callable的result:" + result.get());
}private void addtaskrunnable(executorservice service) throws executionexception, interruptedexception
}, str);
service.submit(result);
system.out.println("taskrunnable的result:" + result.get());
}private void addtaskcallable(executorservice service) throws executionexception, interruptedexception
});service.submit(result);
system.out.println("taskcallable的result:" + result.get());
}
執行後控制台列印如下:
i/system.out: runnable的result:null
i/system.out: callable的result:這裡是callable
i/system.out: taskrunnable的result:這裡是taskrunnable
i/system.out: taskcallable的result:這裡是taskcallable
其中第三個,傳入futuretask的是乙個runnable實現和乙個result。在futuretask中,會自動把這兩者包裝成乙個callable,所以其實後三個都是callable。 Executors類中建立執行緒池的幾種方法的分析
要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。1 newfixedthreadpool 建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個...
Executors類中建立執行緒池的幾種方法的分析
要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。1 newfixedthreadpool 建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個...
建立Windows Service的幾種方式
最近由於工作需要,寫了一些windows服務程式,有一些經驗,我現在總結寫出來。目前我知道的建立建立windows服務有3種方式 a.利用.net框架類servicebase b.利用元件topshelf c.利用小工具instsrv和srvany 下面我利用這3種方式,分別做乙個windows服務...