摘要:类这是方式启动的运行结果如下接口这是方式启动的运行结果如下接口运行结果如下接口和接口的区别可以有返回值。通过包装成,传递给,因为是实现了接口。
类Thread
public class ThreadDemo extends Thread { public static void main(String[] args) { ThreadDemo thread = new ThreadDemo(); thread.start(); } @Override public void run() { System.out.println("这是Thread方式启动的"); } }
运行结果如下:
public class RunnableDemo implements Runnable { @Override public void run() { System.out.println("这是Runnable方式启动的"); } public static void main(String[] args) { Thread thread = new Thread(new RunnableDemo()); thread.start(); } }
运行结果如下:
public class CallableDemo implements Callable { @Override public String call() throws Exception { return "Callable"; } public static void main(String[] args) { FutureTaskfutureTask = new FutureTask(new CallableDemo()); Thread thread = new Thread(futureTask); thread.start(); try { System.out.println(futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
运行结果如下:
Callable可以有返回值。
通过FutureTask包装成Runnable,传递给Thread,因为FutureTask是实现了Runnable接口。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75122.html
摘要:在并发编程学习之三种线程启动方式中有提过。是否执行结束,包括正常执行结束或异常结束。获取返回值,没有得到返回值前一直阻塞。运行结果如下由于任务被取消,所以抛出异常。注意的是,此时线程还在跑,和返回的是。并不能让任务真正的结束。 FutureTask 在java并发编程学习之三种线程启动方式中有提过。主要的方法如下: cancel(boolean mayInterruptIfRunni...
摘要:与执行方法,是用来启动线程的,此时线程处于就绪状态,获得调度后运行方法。执行方法,相对于普通方法调用,在主线程调用。程序是顺序执行的,执行完才会执行下面的程序。 start与run 执行start方法,是用来启动线程的,此时线程处于就绪状态,获得调度后运行run方法。run方法执行结束,线程就结束。 执行run方法,相对于普通方法调用,在主线程调用。程序是顺序执行的,执行完才会执行下...
摘要:线程安全问题在并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。那么,该怎么解决呢,很简单,在方法前加个同步锁。运行结果如下有两种情况,是因为看谁先抢占锁,但是输出的算法结果是正确的。 线程安全问题 在java并发编程学习之基础概念提到,多线程的劣势之一,有个线程安全问题,现在看看下面的例子。 public class NotSafeDemo { ...
摘要:但是的语义不足以确保递增操作的原子性,在多线程的情况下,线程不一定是安全的。检查某个状态标记,以判断是否退出循环某个方法这边和用普通的变量的区别是,在多线程的情况下,取到后,的值被改变了,判断会不正确。 多线程为什么是不安全的 这边简单的讲述一下,参考java并发编程学习之synchronize(一) 当线程A和线程B同时进入num = num + value; 线程A会把num的值...
摘要:是所有线程池实现的父类,我们先看看构造函数构造参数线程核心数最大线程数线程空闲后,存活的时间,只有线程数大于的时候生效存活时间的单位任务的阻塞队列创建线程的工程,给线程起名字当线程池满了,选择新加入的任务应该使用什么策略,比如抛异常丢弃当前 ThreadPoolExecutor ThreadPoolExecutor是所有线程池实现的父类,我们先看看构造函数 构造参数 corePool...
阅读 1542·2021-11-23 10:01
阅读 2948·2021-11-19 09:40
阅读 3193·2021-10-18 13:24
阅读 3444·2019-08-29 14:20
阅读 2955·2019-08-26 13:39
阅读 1222·2019-08-26 11:56
阅读 2637·2019-08-23 18:03
阅读 346·2019-08-23 15:35