首页 > 办公教程 > 正文

java 线程id,java 线程池是怎么处理执行线程的

2020-05-16 17:03:08  来源:http://www.capsicumpm.com  编辑:admin

java有几种实现线程的方式

java创建线程的方式有三种第一种是继承Thread类 实现方法run() 不可以抛异常 无返回值第二种是实现Runnable接口 实现方法run() 不可以抛异常 无返回值第三种是实现Callable<T>接口,接口中要覆盖的方法是 public <T> call() 注意:此方法可以抛异常,而前两种不能 而且此方法可以有返回值第三种如何运行呢 Callable接口在util.concurrent包中,由线程池提交import java.util.concurrent.*;ExecutorService e = Executors.newFixedThreadPool(10); 参数表示最多可以运行几个线程e.submit(); 这个里面参数传 实现Callable接口那个类的对象

求一个JAVA多线程例子,最好有代码,谢谢啦!

package a.b.test;import java.util.Date;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class Calculate1000 implements Callable<Integer>{ public Calculate1000(){} public Calculate1000(int a, int b){ this.a = a; this.b = b; } int a; int b; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //同步 Calculate1000 ca1 = new Calculate1000(); Date ds1 = new Date(); int result = 0; for(int i = 1 ; i <= 1000 ; i++){ result = ca1.add(i, result); } System.out.println(result); System.out.println("同步用时" + (new Date().getTime() - ds1.getTime()) + "MS"); //异步 Date ds2 = new Date(); result = 0; ExecutorService es = Executors.newFixedThreadPool(2); Future<Integer> future1 = es.submit(new Calculate1000(1,500)); Future<Integer> future2 = es.submit(new Calculate1000(501,1000)); result = future1.get() + future2.get(); System.out.println(result); System.out.println("异步用时" + (new Date().getTime() - ds2.getTime()) + "MS"); es.shutdown(); } private int add(int a, int b) throws Exception{ Thread.sleep(10); return a + b; } @Override public Integer call() throws Exception { int res = 0; for(int i = a ; i <= b ; i++){ res = this.add(res, i); } return res; }}楼主你试一下这段代码行不行,行的话请采纳!

Java多线程问题。。。

都是一样的效果的。 JAVA程序线程的运行:在我们使用java命令来运行程序时,这时候已经开始了两个线程,一个是main()方法的线程,一个是垃圾回收的线程。当楼主调用start方法开启另外两个线程时。这时候由于CPU来决定运行哪个线程。所以虽然noet1是先开启的,但在执行noet1时,CPU可能又去跑去执行main线程了,然后就会开启onet2.

java多线程,怎么算出最佳的生产消费的配比比例?

这和生产者和消费者线程耗时有关,最简单的一个公式:生产者线程数*消费者平均耗时=消费者线程数*生产者平均耗时得出:生产者线程数/消费者线程数=消费者平均耗时/生产者平均耗时。得出比例后就需要确定具体的线程数了,线程数需要根据业务量大小确实,这个没办法根据公式计算。同时,线程数还受到应用类型和cpu核心数的影响,一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)如果是CPU密集型应用,则线程池大小设置为N+1如果是IO密集型应用,则线程池大小设置为2N+1总之线程的配置是一个比较繁琐的过程,需要通过不断的试验找到最佳的配置。

java线程池需要频繁的销毁和创建吗

你是用Java自带的ExecutorService这个线程池么?如果是的话,ExecutorService自身会管理池中的线程,不需外界手动干预。如果是自己写的话,必须在线程池内的线程加入退出判定,要不然的话是没法从线程外结束线程的。(你也不应该这样做,因为这样会导致验证的资源泄漏)本回答被提问者采纳