「java项目线程数设置」java多线程配置

博主:adminadmin 2023-01-15 07:27:09 680

本篇文章给大家谈谈java项目线程数设置,以及java多线程配置对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中想开多线程,线程数量控制

cpu不同,最多能开的线程肯定不一样,我们一般的程序肯定是能满足的,也必要去纠结这种问题把。

一般你想开多少就能开多少的。你的对象继承了Thread或是实现了Runnable接口后,可以在main()方法中创建多个这样的对象,要很多的话,可以用for循环来创建你想要的个数。

class

MyThread

implements

Runnable{

public

void

run(){

for(int

i

=

1;

i

10;

i++){

System.out.println(Thread.currentThread().getName());

}

}

}

public

class

Test{

public

static

void

main(String[]

args){

MyThread[]

myThread;

for(int

i

=

0;

i

100;

i++){

myThread[i]

=

new

MyThread();

}

for(int

i

=

0;

i

100;

i++){

new

Thread(myThread[i]).start();

}

}

}

没听过考虑cpu的负载哦。

都是按程序的要求来的。

Java的服务器一般运行几个线程比较合适

首先确认你是cpu密集型的还是io密集型的,

如果是cpu密集型的线程数可以设置到和cpu个数一致,

如果是io密集型的,首先需要确认你io wait的时间,线程数和io wait时间成正比, 具体需要根据测试得出。

java线程池如何合理的设置大小

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目  

比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:view sourceprint?

最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目  

可以得出一个结论:

线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

Java如何依据cpu核数设置合适的线程数

1:获取cpu核心数:

Runtime.getRuntime().availableProcessors();

创建线程池:

Executors.newFixedThreadPool(nThreads);//nThreads为线程数

2:这个只要服务器内存够大,CPU核心数较多,处理数据比较强就好了,注意不要一下分配几千个线程,可 能会导致堆栈溢出的,这样程序就挂了,因为线程很费内存资源

Java的线程池,如何设定保留的最小线程数和固定的队列容量

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

看代码:

Java代码 收藏代码

package test;

import java.util.Random;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

public class ExecutorTest {

public static void main(String args[]) {

Random random = new Random();

//产生一个 ExecutorService 对象,这个对象带有一个大小为 poolSize 的线程池,若任务数量大于 poolSize ,任务会被放在一个 queue 里顺序执行。

ExecutorService executor = Executors.newFixedThreadPool(3);

// 判断可是线程池可以结束

int waitTime = 500;

for (int i = 0; i 10; i++) {

String name = "线程 " + i;

int time = random.nextInt(1000);

waitTime += time;

Runnable runner = new ExecutorThread(name, time);

System.out.println("增加: " + name + " / " + time);

executor.execute(runner);

}

try {

Thread.sleep(waitTime);

executor.shutdown();

executor.awaitTermination(waitTime, TimeUnit.MILLISECONDS);

} catch (InterruptedException ignored) {

}

}

}

class ExecutorThread implements Runnable {

private final String name;

private final int delay;

public ExecutorThread(String name, int delay) {

this.name = name;

this.delay = delay;

}

public void run() {

System.out.println("启动: " + name);

try {

Thread.sleep(delay);

} catch (InterruptedException ignored) {

}

System.out.println("完成: " + name);

}

}

java线程池中的线程数应该如何设置

java中线程池的监控可以检测到正在执行的线程数。

通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用

taskCount:线程池需要执行的任务数量。

completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。

largestPoolSize:线程池曾经创建过的最大线程数量。通过这个数据可以知道线程池是否满过。如等于线程池的最大大小,则表示线程池曾经满了。

getPoolSize:线程池的线程数量。如果线程池不销毁的话,池里的线程不会自动销毁,所以这个大小只增不+ getActiveCount:获取活动的线程数。

通过扩展线程池进行监控。通过继承线程池并重写线程池的beforeExecute,afterExecute和terminated方法,我们可以在任务执行前,执行后和线程池关闭前干一些事情。如监控任务的平均执行时间,最大执行时间和最小执行时间等。这几个方法在线程池里是空方法。如:

protected void beforeExecute(Thread t, Runnable r) { }

关于java项目线程数设置和java多线程配置的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。