Java 如何在不使用ExecutorService的情况下实现固定线程池

Java 如何在不使用ExecutorService的情况下实现固定线程池,java,multithreading,executorservice,Java,Multithreading,Executorservice,我有这样的代码块 static ExecutorService executor = Executors.newFixedThreadPool(4); Runnable worker = new CsvToJavaObject(newFilePath); executor.execute(worker); 我想将线程数限制在n(4)个,并且不使用Executor服务。我该怎么做 ThreadPoolExecutor呢 ThreadPoolExecutor threadPool

我有这样的代码块

   static ExecutorService executor = Executors.newFixedThreadPool(4);
   Runnable worker = new CsvToJavaObject(newFilePath);
   executor.execute(worker);

我想将线程数限制在n(4)个,并且不使用Executor服务。我该怎么做

ThreadPoolExecutor呢

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 5, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
ThreadPoolExecutor threadPool=new ThreadPoolExecutor(5,5,5,TimeUnit.SECONDS,new LinkedBlockingQueue());
您的核心数是“4”吗?您是否试图将并行执行限制为系统中的内核数? 如果是这样的话:我只会使用TPL(例如“new Task(Action)”),它已经尊重了您的系统设置。 如果需要,您甚至可以手动设置threadpool提供的线程数,请参阅threadpool.SetMinThreads,但只有少数情况下这样做是有意义的


编辑:我的错误,认为这是一个c#问题…

如果您只想根据需要生成一个任务,那么您实际上需要一个修改过的BlockingQueue


当线程池有空闲线程时,它会对队列执行阻塞take()。修改后的队列可以根据需要创建任务。

方法是自己重新创建ExecutorService的功能。你为什么要这样做?那么你到目前为止一直试图实现的“不使用Executor服务”是什么?我尝试使用Thread.activeCount()但是我猜它在这里是不正确的,它还将包括其他线程。我开始使用线程数组。启动n个任务,然后轮询它们是否在数组循环中处于活动状态。如果小于n,则生成另一个任务。但它看起来不太好,因此您希望复制ThreadPoolExecutor中使用的代码并对其进行更改。如果您想知道线程池是如何工作的,您应该阅读它的代码。在java 5中引入执行器之前,人们是如何管理它的呢?很抱歉,我只是想知道如何编写管理n个运行线程的简单逻辑。