日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java多线程init,Java多线程 - 线程 - 初识

發(fā)布時(shí)間:2025/3/19 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程init,Java多线程 - 线程 - 初识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

線程任務(wù)代碼:

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* 線程任務(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;

/**

* 線程執(zhí)行者

* 緩存線程池: 已創(chuàng)建的緩存線程池,當(dāng)需要執(zhí)行新的任務(wù)會(huì)創(chuàng)建新的線程,

* 如果它們已經(jīng)完成運(yùn)行任務(wù),變成可用狀態(tài),會(huì)重新使用這些線程。

* 線程重復(fù)利用的好處是,它減少線程創(chuàng)建的時(shí)間。

* 緩存線程池的缺點(diǎn)是,為新任務(wù)不斷創(chuàng)建線程, 所以如果你提交過多的任務(wù)給執(zhí)行者,會(huì)使系統(tǒng)超載。

*

* ThreadPoolExecutor 類和一般執(zhí)行者的一個(gè)關(guān)鍵方面是,你必須明確地結(jié)束它。

* 如果你沒有這么做,這個(gè)執(zhí)行者會(huì)繼續(xù)它的執(zhí)行,并且這個(gè)程序不會(huì)結(jié)束。

* 如果執(zhí)行者沒有任務(wù)可執(zhí)行, 它會(huì)繼續(xù)等待新任務(wù)并且不會(huì)結(jié)束它的執(zhí)行。

* 一個(gè)Java應(yīng)用程序?qū)⒉粫?huì)結(jié)束,除非所有的非守護(hù)線程完成它們的執(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ù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java多线程init,Java多线程 - 线程 - 初识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。