线程池的基本使用

线程池的使用


以成员变量的方式创建线程池:
线程池各个参数的详细说明:https://ifeve.com/java-threadpool/

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TestThreadPool {
    public static final ThreadPoolExecutor POOL_EXECUTOR = new ThreadPoolExecutor
            (Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 2, 0L,
                    TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(1024), new ThreadPoolFactory("ThreadPool"));


    //execute方法
    public void function(String str, Integer num) {
        POOL_EXECUTOR.execute(() -> demo(str, num));

    }

    public void demo(String str, Integer num) {

    }

    public void functionTwo(String str, Integer num) {
        POOL_EXECUTOR.submit(() -> {
            if (null != str) {
                System.out.println(123);
            }
        });

    }

}

//用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字
class ThreadPoolFactory implements ThreadFactory{

        private String prefix;
        private int count;

        public ThreadPoolFactory(String prefix){
            this.prefix = prefix;
            this.count = 0;

        }

        @Override
        public Thread newThread(Runnable r) {
            ++this.count;
            return new Thread(r, this.prefix + "-Thread-" +this.count);
        }
    }

类似于线程池 TaskExecutor的使用

import lombok.extern.slf4j.Slf4j;

/**
 * */
@Slf4j
public class SignSendTask implements Runnable {

    private String orgOrder;

    private String channelId;

	//构造器用于传参
    public SignSendTask(String orgOrder,String channelId) {
        this.orgOrder = orgOrder;
        this.channelId = channelId;
    }

    /**
     * 重写run方法
     */
    @Override
    public void run() {
       //执行逻辑
	   System.out.println(orgOrder,channelId);
	   
    }
    
}

class Function{

    //TaskExecutor 类似于线程池
	@Resource(name = "quitTaskExecutor")
    private TaskExecutor quitTaskExecutor;
	
	public void demo() {
	
	 //实现了Runnable接口
	 quitTaskExecutor.execute(new SignSendTask(orgOrder, channelId));
	 
	 //没有实现Runnable接口 也不重写run方法
	 quitTaskExecutor.execute(new Runnable() {
				@Override
				public void run() {
				  //执行逻辑
				  System.out.println(orgOrder,channelId);
				}
			});
     //lamda表达式的方式
	 quitTaskExecutor.execute(() -> {

			});	
		
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值