java多线程init,Java多线程 - 线程 - 初识
線程任務代碼:
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 線程任務
*/
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("創建任務 -> TaskName:" + name + ",initDate:" +initDate);
}
public void run() {
System.out.println("執行任務-> TaskName:" + name + ",date:" + sdf.format(new Date()));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("完成任務-> 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;
/**
* 線程執行者
* 緩存線程池: 已創建的緩存線程池,當需要執行新的任務會創建新的線程,
* 如果它們已經完成運行任務,變成可用狀態,會重新使用這些線程。
* 線程重復利用的好處是,它減少線程創建的時間。
* 緩存線程池的缺點是,為新任務不斷創建線程, 所以如果你提交過多的任務給執行者,會使系統超載。
*
* ThreadPoolExecutor 類和一般執行者的一個關鍵方面是,你必須明確地結束它。
* 如果你沒有這么做,這個執行者會繼續它的執行,并且這個程序不會結束。
* 如果執行者沒有任務可執行, 它會繼續等待新任務并且不會結束它的執行。
* 一個Java應用程序將不會結束,除非所有的非守護線程完成它們的執行。所以,如果你不結束這個執行者,你的應用程序將不會結束。
*/
public class Server {
private ThreadPoolExecutor executor;
public Server() {
executor = (ThreadPoolExecutor) Executors.newCachedThreadPool();
}
public void executeTask(Task task){
System.out.println("一個新的任務到達:" + task);
executor.execute(task); // 提交任務
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結果:
創建任務 -> TaskName:task_name_0,initDate:2017-08-23 11:17:45
一個新的任務到達:Task [initDate=2017-08-23 11:17:45, name=task_name_0]
Server: Pool Size: 1
執行任務-> TaskName:task_name_0,date:2017-08-23 11:17:45
Server: Active Count: 1
Server: Completed Tasks: 0
創建任務 -> TaskName:task_name_1,initDate:2017-08-23 11:17:45
一個新的任務到達:Task [initDate=2017-08-23 11:17:45, name=task_name_1]
Server: Pool Size: 2
Server: Active Count: 2
Server: Completed Tasks: 0
執行任務-> TaskName:task_name_1,date:2017-08-23 11:17:45
創建任務 -> TaskName:task_name_2,initDate:2017-08-23 11:17:45
一個新的任務到達:Task [initDate=2017-08-23 11:17:45, name=task_name_2]
Server: Pool Size: 3
Server: Active Count: 3
Server: Completed Tasks: 0
執行任務-> TaskName:task_name_2,date:2017-08-23 11:17:45
完成任務-> TaskName:task_name_1,date:2017-08-23 11:17:47
完成任務-> TaskName:task_name_0,date:2017-08-23 11:17:47
完成任務-> TaskName:task_name_2,date:2017-08-23 11:17:47
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java多线程init,Java多线程 - 线程 - 初识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab方位探测处理,急大神帮忙,谁
- 下一篇: mac java偏好设置_在 Mac中配