博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java线程池创建守护线程_多线程 线程池 守护线程
阅读量:5254 次
发布时间:2019-06-14

本文共 2998 字,大约阅读时间需要 9 分钟。

守护线程只是个概念问题,一句话可以总结(不知道总结的对不对^_^);

当所有用户线程都结束的时候,守护线程也就结束了,当有用户线程存在的时候,守护线程就是一个普通线程。

main线程不可以设置成守护线程,应为只有在线程调用start方法前,才可以设置线程为守护线程,main线程是jvm创建的

多线程以及线程池的问题

import java.io.DataInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Down {

ExecutorService executorService = Executors.newFixedThreadPool(3);

public void down() {

boolean a = new File("C:/123/").mkdir();

List urls = new ArrayList();

urls.add("http://img1.cache.netease.com/catchpic/6/66/66F01DF5FA318F96FE695D4A1CA1A698.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

urls.add("http://img1.cache.netease.com/catchpic/C/C5/C5625E5D94AFBBF73DBB8C88D762A634.jpg");

for (int i = 0; i < urls.size(); i++) {

executorService.execute(new DownImg(urls.get(i), i));

}

}

public static void main(String[] args) {

Down down = new Down();

down.down();

// down.executorService.isTerminated()

down.executorService.shutdown();

while (true) {

if (down.executorService.isTerminated()) {

System.out.println("所有的已经下载完毕");

break;

}

try {

Thread.sleep(100);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

class DownImg implements Runnable {

int i;

String imgUrl;

URL url;

int len;

byte[] bytes = new byte[1024];

public DownImg(String imgUrl, int i) {

this.i = i;

this.imgUrl = imgUrl;

try {

url = new URL(imgUrl);

} catch (MalformedURLException e) {

e.printStackTrace();

}

}

@Override

public void run() {

try {

DataInputStream dataInputStream = new DataInputStream(

url.openStream());

FileOutputStream fileOutputStream = new FileOutputStream("C:/123/"

+ i + ".jpg");

while ((len = dataInputStream.read(bytes)) > 0) {

fileOutputStream.write(bytes, 0, len);

}

dataInputStream.close();

fileOutputStream.close();

System.out.println("第" + i + "张下载完毕");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

down.executorService.shutdown();这个方法,是在线程池中的线程只执行一次任务;

如果没有调用,线程池的线程执行完一次任务后,会一直处于等待状态,还要注意的是这个方法是在for语句执行完毕后,才会执行的

转载地址:http://ogeav.baihongyu.com/

你可能感兴趣的文章
poj 1331 Multiply
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
P1107 最大整数
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>
Item 9: Avoid Conversion Operators in Your APIs(Effective C#)
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>