「java项目线程数设置」java多线程配置
本篇文章给大家谈谈java项目线程数设置,以及java多线程配置对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中想开多线程,线程数量控制
- 2、Java的服务器一般运行几个线程比较合适
- 3、java线程池如何合理的设置大小
- 4、Java如何依据cpu核数设置合适的线程数
- 5、Java的线程池,如何设定保留的最小线程数和固定的队列容量
- 6、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多线程配置的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。