java多线程init,Java多线程 - 线程 - 初识
線(xiàn)程任務(wù)代碼:
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 線(xiàn)程任務(wù)
*/
public class Task implements Runnable{
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private String initDate;
private String name;
public Task(String name) {
this.name = name;
initDate = sdf.format(new Date());
System.out.println("創(chuàng)建任務(wù) -> TaskName:" + name + ",initDate:" +initDate);
}
public void run() {
System.out.println("執(zhí)行任務(wù)-> TaskName:" + name + ",date:" + sdf.format(new Date()));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成任務(wù)-> TaskName:" + name + ",date:" + sdf.format(new Date()));
}
@Override
public String toString() {
return "Task [initDate=" + initDate + ", name=" + name + "]";
}
}
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 線(xiàn)程執(zhí)行者
* 緩存線(xiàn)程池: 已創(chuàng)建的緩存線(xiàn)程池,當(dāng)需要執(zhí)行新的任務(wù)會(huì)創(chuàng)建新的線(xiàn)程,
* 如果它們已經(jīng)完成運(yùn)行任務(wù),變成可用狀態(tài),會(huì)重新使用這些線(xiàn)程。
* 線(xiàn)程重復(fù)利用的好處是,它減少線(xiàn)程創(chuàng)建的時(shí)間。
* 緩存線(xiàn)程池的缺點(diǎn)是,為新任務(wù)不斷創(chuàng)建線(xiàn)程, 所以如果你提交過(guò)多的任務(wù)給執(zhí)行者,會(huì)使系統(tǒng)超載。
*
* ThreadPoolExecutor 類(lèi)和一般執(zhí)行者的一個(gè)關(guān)鍵方面是,你必須明確地結(jié)束它。
* 如果你沒(méi)有這么做,這個(gè)執(zhí)行者會(huì)繼續(xù)它的執(zhí)行,并且這個(gè)程序不會(huì)結(jié)束。
* 如果執(zhí)行者沒(méi)有任務(wù)可執(zhí)行, 它會(huì)繼續(xù)等待新任務(wù)并且不會(huì)結(jié)束它的執(zhí)行。
* 一個(gè)Java應(yīng)用程序?qū)⒉粫?huì)結(jié)束,除非所有的非守護(hù)線(xiàn)程完成它們的執(zhí)行。所以,如果你不結(jié)束這個(gè)執(zhí)行者,你的應(yīng)用程序?qū)⒉粫?huì)結(jié)束。
*/
public class Server {
private ThreadPoolExecutor executor;
public Server() {
executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
}
public void executeTask(Task task){
System.out.println("一個(gè)新的任務(wù)到達(dá):" + task);
executor.execute(task); // 提交任務(wù)
System.out.println("Server: Pool Size: " + executor.getPoolSize());
System.out.println("Server: Active Count: " + executor.getActiveCount());
System.out.println("Server: Completed Tasks: " + executor.getCompletedTaskCount());
}
public void endServer(){
executor.shutdown();
}
}
public class TaskServerTest {
public static void main(String[] args) {
Server server = new Server();
for(int i=0;i<3;i++){
Task task = new Task("task_name_"+i);
server.executeTask(task);
}
server.endServer();
}
}
// console結(jié)果:
創(chuàng)建任務(wù) -> TaskName:task_name_0,initDate:2017-08-23 11:17:45
一個(gè)新的任務(wù)到達(dá):Task [initDate=2017-08-23 11:17:45, name=task_name_0]
Server: Pool Size: 1
執(zhí)行任務(wù)-> TaskName:task_name_0,date:2017-08-23 11:17:45
Server: Active Count: 1
Server: Completed Tasks: 0
創(chuàng)建任務(wù) -> TaskName:task_name_1,initDate:2017-08-23 11:17:45
一個(gè)新的任務(wù)到達(dá):Task [initDate=2017-08-23 11:17:45, name=task_name_1]
Server: Pool Size: 2
Server: Active Count: 2
Server: Completed Tasks: 0
執(zhí)行任務(wù)-> TaskName:task_name_1,date:2017-08-23 11:17:45
創(chuàng)建任務(wù) -> TaskName:task_name_2,initDate:2017-08-23 11:17:45
一個(gè)新的任務(wù)到達(dá):Task [initDate=2017-08-23 11:17:45, name=task_name_2]
Server: Pool Size: 3
Server: Active Count: 3
Server: Completed Tasks: 0
執(zhí)行任務(wù)-> TaskName:task_name_2,date:2017-08-23 11:17:45
完成任務(wù)-> TaskName:task_name_1,date:2017-08-23 11:17:47
完成任務(wù)-> TaskName:task_name_0,date:2017-08-23 11:17:47
完成任務(wù)-> TaskName:task_name_2,date:2017-08-23 11:17:47
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java多线程init,Java多线程 - 线程 - 初识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab方位探测处理,急大神帮忙,谁
- 下一篇: matlab硬接触,abaqus中的关于