Executors工厂类中有很多静态方法用于创建线程池。下面简单的介绍其中几种使用:
newFixedThreadPool:创建指定线程数的线程池,通常设定的线程数根据系统资源设置。
newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理需要,可以回收空闲的线程,若线程数不够处理需要,则创建新的线程。
newScheduledThreadPool:创建定长线程池,可以定时以及周期性执行任务。
newFixedThreadPool:创建指定线程数的线程池,通常设定的线程数根据系统资源设置。
newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理需要,可以回收空闲的线程,若线程数不够处理需要,则创建新的线程。
newScheduledThreadPool:创建定长线程池,可以定时以及周期性执行任务。
newSingleThreadExecutor:创建一个单线程线程池,只用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
下面简单的使用线程池下载网页和图片。
/**
* Created by diy_os on 2016/11/7.
*/
public interface Response {
public void callbackHTML(String s);
public void callbackPIC(byte[] bytes);
}
public class httpdownload {
public static void getHttp(Response response){
try {
URL url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(6000);
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String s;
StringBuilder builder = new StringBuilder();
while ((s = reader.readLine())!=null){
builder.append(s);
}
if(builder != null){
response.callbackHTML(builder.toString());
}else {
response.callbackHTML(null);
}
in.close();
String url2 = "http://m2.quanjing.com/2m/sps009/4251r-4561.jpg";
url = new URL(url2);
connection.disconnect();
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(6000);
InputStream input = connection.getInputStream();
// byte bytes[] = new byte[1024];
// FileOutputStream write = new FileOutputStream(new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/down.jpg"),true);
//
// while (input.read(bytes,0,1024)!=-1){
// write.write(bytes);
// }
// input.close();
// write.close();
byte bytes[] = readInputStream(input);
response.callbackPIC(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
}
public class FixedThreadPool {
public static void main(String[] args) {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
httpdownload.getHttp(new Response() {
@Override
public void callbackHTML(String s) {
System.out.print(s.toString());
File file = new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/file.txt");
/* File newfile = new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/d"); 用于创建一个新的文件夹
newfile.mkdir();
*/
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write(s);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void callbackPIC(byte[] bytes) {
try {
FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
write.write(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
}
}
public class CachedThreadPool {
public static void main(String[] args){
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
httpdownload.getHttp(new Response(){
@Override
public void callbackHTML(String s) {
System.out.print(s.toString());
File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write(s);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void callbackPIC(byte[] bytes) {
try {
FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
write.write(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
}
}
public class ScheduledThreadPool {
public static void main(String[] args){
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(5);
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
httpdownload.getHttp(new Response(){
@Override
public void callbackHTML(String s) {
System.out.print(s.toString());
File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write(s);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void callbackPIC(byte[] bytes) {
try {
FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
write.write(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
},3, TimeUnit.SECONDS);
}
}
public class SingleThreadExecutor {
public static void main(String[] args) {
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
singleThreadExecutor.execute(new Runnable() {
@Override
public void run() {
httpdownload.getHttp(new Response() {
@Override
public void callbackPIC(byte[] bytes) {
try {
FileOutputStream write = new FileOutputStream(new File("D:/ideaworkspace/JavaSimple/download/src/com/java/threadpool/down.jpg"), true);
write.write(bytes);
} catch (Exception e) {
e.printStackTrace();
}
}
public void callbackHTML(String s) {
System.out.print(s.toString());
File file = new File("G:/JAVA Program File/ideaworkspace/Thread/src/com/java/pool/file.txt");
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write(s);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
}
}