Java基础编程(20)---线程池

相关代码来源:学习马士兵老师的课程。

1、Executor 的简单实用

package com.test;

import java.util.concurrent.Executor;

public class T01Executor implements Executor {

public static void main(String[] args){
new T01Executor().execute(
()->System.out.println("hello")
);
}
@Override
public void execute(Runnable command) {
command.run();
}
}


2、FixedThreadPool的概念和使用

package com.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;

public class T05_TheadPool {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(5);
for(int i=0;i<6;i++){
service.execute(()->{  
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
});
}
System.out.println(service);
service.shutdown();
System.out.println(service.isTerminated());
}

}


3、Future的使用

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

public class T06_Future {
public static void main(String[] args) throws Exception, Exception {
//FutureTask包装了一个任务(未来)
//()->相当于new Callable(){Integer call()}
FutureTask<Integer> task = new FutureTask<>(()->{
TimeUnit.MILLISECONDS.sleep(1500);
return 1000;
});
new Thread(task).start();
System.out.println(task.get()); //阻塞
//submit有返回值,execute没有返回值
ExecutorService service = Executors.newFixedThreadPool(5);
FutureTask<Integer> f = (FutureTask<Integer>) service.submit(()->{
TimeUnit.MILLISECONDS.sleep(500);
return 1;
});

System.out.println(f.isDone());
System.out.println(f.get());
System.out.println(f.isDone());
}
}


4、质数的计算

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class T07_ParallelComputing {

public static void main(String[] args) throws InterruptedException, ExecutionException {
long start = System.currentTimeMillis();
List<Integer> results = getPrime(1, 200000);
long end = System.currentTimeMillis();

System.out.println(end - start);

                final int cpuCreNum = 4;

ExecutorService service = Executors.newFixedThreadPool(cpuCreNum);
Mytask t1 = new Mytask(1, 80000);
Mytask t2 = new Mytask(80001, 130000);
Mytask t3 = new Mytask(130001, 170000);
Mytask t4 = new Mytask(170000, 200000);

Future <List<Integer>> f1 = service.submit(t1);
Future <List<Integer>> f2 = service.submit(t2);
Future <List<Integer>> f3 = service.submit(t3);
Future <List<Integer>> f4 = service.submit(t4);

start = System.currentTimeMillis();
f1.get();
f2.get();
f3.get();
f4.get();
end = System.currentTimeMillis();
System.out.println(end - start);
}

static class Mytask implements Callable<List<Integer>>{
 int startPos,endPos;
  Mytask(int s ,int e){
 this.startPos = s ;
 this.endPos = e;
  }
@Override
public List<Integer> call() throws Exception {
List<Integer> r = getPrime(startPos, endPos);
return r;
}
}

static boolean isPrime(int num){
for(int i=2;i<num/2;i++){
if(num%i==0){
return false;
}
}
return true;
}

static List<Integer> getPrime(int start,int end){
List<Integer> result = new ArrayList<Integer>();
for(int i=start;i<=end;i++){
if(isPrime(i)){
result.add(i);
}
}
return result;
}
}


5、CachedThreadPool 的简单使用

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class T08_CachPool {
public static void main(String[] args) throws InterruptedException {
        ExecutorService service = Executors.newCachedThreadPool();
for(int i=0;i<2;i++){
service.execute(()->{  
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
});
}
System.out.println(service);
TimeUnit.SECONDS.sleep(80);
System.out.println(service);
}
}


6、SingleThread 的简单使用

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class T09_SingleThread {
public static void main(String[] args) {
       ExecutorService service = Executors.newSingleThreadExecutor();
for(int i=0;i<6;i++){
int j = i;
service.execute(()->{  
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(j+" "+ Thread.currentThread().getName());
});
}
}
}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值