比较创建几种线程的方式

JDK5.0新增的创建多线程的方式:

新增一:

//创建多线程的方式三:callabe;import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;//1.创建一个Callable的实现类
class NewThread implements Callable {//	2.实现call方法(可以有返回值)@Overridepublic Object call() throws Exception {// TODO Auto-generated method stubint sum = 0;for(int i = 1 ; i <= 100 ; i++) {if(i%2 == 0) {System.out.println(i);sum+=i;}}	return sum;}}public class Thread_new {public static void main(String[] args) {
//		3.创建callable的实现类的对象NewThread t1 = new NewThread();//		4.将此作为参数传递到FutureTask中的构造器中,创建FutureTask的对象FutureTask futuretask = new FutureTask (t1);//		 FutureTask类也实现了Runnable接口
//		 5.将FutureTask的对象作为参数传递到Thread的构造器中,创建Thread对象,并且start调用new Thread(futuretask).start();try {//			 6.获取callable中的返回值
//			get方法的返回值即为FutureTask构造器参数中Callabl中重写的call()的返回值Object sum = futuretask.get();System.out.println(sum);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ExecutionException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

比较实现类callabe比Runnable好的原因:

1.call方法中可以有返回值

2.call方法可以抛出异常,被外面的操作捕获,并且获取异常信息

3.callabe使支持泛型的

新增方式二:线程池

  

 


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;/** 创建线程的方法四:线程池* */class ThreadFour implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubfor(int i = 0 ; i < 100 ; i++) {if(i%2==0) {System.out.println(Thread.currentThread().getName()+":"+i);}}}}//输出奇数
class ThreadFive implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubfor(int i = 0 ; i < 100 ; i++) {if(i%2!=0) {System.out.println(Thread.currentThread().getName()+":"+i);}}}}public class ThreadPool {public static void main(String[] args) {// TODO Auto-generated method stub
//		1.提供指定线程数量的线程池ExecutorService service = Executors.newFixedThreadPool(10);ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;//ThreadPoolExecutor是接口ExecutorService实现类的子类		service1.setCorePoolSize(15);
//		service1.getKeepAliveTime(null);//		设置线程池的属性//		service.execute(null);  适合实现Runnable类  即执行
//		service.submit(null)  适合实现Callable类
//		2.执行制定的线程的操作,需要提供实现Runnable()和Callable()接口的实现类的对象service.execute(new ThreadFour());service.execute(new ThreadFive());service.shutdown();//关闭线程池  }}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程的安全问题

解决方法一: 注意:在synchronized中的同步监视器&#xff08;锁&#xff09;只能是唯一的。 方式二&#xff0c;同步方法 方法三&#xff1a; lock() lock锁 public class ThreadTest6 {public static void main(String[] args) {Window w new Window();Thread t1 new Thre…

数据的个人视角:数据可视化的意义

当谈论到数据可视化对个人用户的实用价值时&#xff0c;很多人可能会想到它仅适用于企业或专业领域。然而&#xff0c;数据可视化对个人用户同样具有重要的实用价值。本文将从可视化从业者的角度出发&#xff0c;简单说说数据可视化对个人用户的实用价值。 首先&#xff0c;数…

线程的通信

//线程通信 //线程1 线程2 交替打印1——100 //wait()和notify()方法需要在一个监视器的同步代码块 中或者是同一个同步方法中// wait()&#xff1a;线程从运行状态进入阻塞状态&#xff0c;并且释放锁 // notify():一旦执行此方法就会唤醒被wait的一个线程&#xff0c;如果多个…

线程通信的经典问题:生产者消费者问题

package ThreadTest2; // 线程通信的经典问题&#xff1a;生产者消费者//店员&#xff08;资源&#xff09; class Clerk{private int productCount 0 ;public synchronized void produceProduct() {if(productCount < 100 ) {productCount;System.out.println(Thread.curr…

String类中不同拼接方式

有变量名参与都不是在常量池中了&#xff0c;类似于new

使用JMeter创建数据库(Mysql)测试

我的环境&#xff1a;MySQL&#xff1a;mysql-essential-5.1.51-win32 jdbc驱动&#xff1a;我已经上传到csdn上一个&#xff1a;http://download.csdn.net/source/3451945 JMeter&#xff1a;jmeter-2.4 任意版本都行。 1.首先我们要有一个可以做测试的数据库&#xff0c;当然…

String类与其他数据类型得转换

一&#xff1a;与基本数据类型或者包装类 二、String与char型数组得转换 三、String类与字节数组byte[]之间的转换 输出的是字符中得ASCII码。 getBytes使用的默认得编码集 可以自主设置编码集否则为默认编码集 输出&#xff1a;

字符串类中的StringBuffer,StringBuilder

StringBuffer类的常用方法 &#xff0c; String StringBuffer,StringBuilder的效率

JAVA日期和时间API

JDK8以前&#xff1a; public void test2() { // 构造器1&#xff1a;Date date1 new Date();System.out.println(date1); // date1.toString// 构造器2&#xff1a;创建指定毫秒数的Date对象Date date2 new Date(1631722133700L);System.out.println(date2);} JDK8以后: …

Calender日历类

使用方法&#xff1a; Testpublic void test() { // 调用其静态方法得到一个对象Calendar calendar Calendar.getInstance();System.out.println(calendar.getClass()); // 输出的为 GregorianCalendar类// get() 得到所需的数据 比如这一年的第几天int days calendar.…

JDK8后的日期时间API

Testpublic void test() { // now() 获取当前的时间&#xff0c;日期LocalDate ld LocalDate.now();LocalTime lt LocalTime.now();LocalDateTime ldt LocalDateTime.now();System.out.println(ld);System.out.println(lt);System.out.println(ldt);// of():指定年月日 …

送花(洛谷 2073)

题目背景 小明准备给小红送一束花&#xff0c;以表达他对小红的爱意。他在花店看中了一些花&#xff0c;准备用它们包成花束。 题目描述 这些花都很漂亮&#xff0c;每朵花有一个美丽值W&#xff0c;价格为C。 小明一开始有一个空的花束&#xff0c;他不断地向里面添加花。他有…