关于编程的那些事-7
2021/11/7 17:15:38
本文主要是介绍关于编程的那些事-7,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.FutureT类有什么作用?它实现了那些接口?Callable接口和Runnable接口有什么不同?
FutureTask: FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本方法,提 供 start cancel 操作,可以查询计算是否已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get方法会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消。
FutureTask实现了Runnable接口和Future接口。
Callable接口和Runnable接口相似,区别就是Callable需要实现call方法,而Runnable需要实现run方法;并且, call方法还可以返回任何对象 ,无论是什么对象,JVM都会当作Object来处理。
二.请查阅JDK自学线程池的相关类,如ThreadPoolExecutor构造七各个参数的意义,利用线程池编写多线程程序。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
1.corePoolSize:线程池核心线程数(平时保留的线程数)
2.maximumPoolSize:线程池最大线程数(当workQueue都放不下时,启动新线程,最大线程数)
3.keepAliveTime:超出corePoolSize数量的现成的保留时间。
4.unit: keepaliveTime单位
5.workQueue:阻塞队列,存放来不及执行的线程
ArrayblockingQueue:构造函数一定要传大小
LinkedBlockingQueue:构造函数不穿大小会默认为(Integer.MAX_VALUE),当大量请求任务时,荣富易造成内存耗尽。
SynchronousQueue:同步队列,一个没有存储空间的阻塞队列 ,将任务同步交付给工作线程。
PriorityBlockingQueue : 优先队列
6.theadFactory:线程工厂
7. handler:饱和策略
AbortPolicy(默认):直接抛弃
CallerRunsPolicy:用调用者的线程执行任务
DiscardOldestPolicy:抛弃队列中最久的任务
DiscardPolicy:抛弃当前任务
三.volatile关键字有什么作用?
1.变量可见性:保证该变量对所有线程可见,这里的可见指的是当一个线程修改了变量的值,那么新的值对于其他线程是可以立即获取的。
2.禁止重排序:volatile禁止了指令重排。比sychronized更轻量级的同步锁。在访问volatile 变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。volatile适合这种场景:一个变量被多个线程共享,线程直接给这个变量赋值。
四.java提供了哪些同步机制来实现互斥?
java提供了关键字synchronized,这是java语言提供的多线程互斥的一种机制。synchronized可以作为函数的修饰符,也可以作为函数内的语句块的修饰符,可以修饰static方法。
1.修饰函数
一、synchronized作函数修饰符public synchronized void fun()
{
// write code here.
}
2.synchronized同步程序块
public void fun_1(someObject obj)
{
synchronized(obj)
{
//code here
}
五.编写java程序模拟烧水泡茶最优工序。
这个模拟程序一共分为三个时间,烧开水,洗茶杯,泡茶 烧开水的时候可以洗茶杯 必须烧完开水,洗完茶杯以后才能开始泡茶 import java.util.Date; public class Tea implements Runnable{ static Date date = new Date(); public static void main(String[] args) throws Exception{ HeatUpWater h1 = new HeatUpWater(); WashCup w1 = new WashCup(); Tea m1 = new Tea(); Thread t1 = new Thread(h1); Thread t2 = new Thread(w1); Thread t3 = new Thread(m1); try{ t1.start(); t2.start(); t2.join(); t1.join(); }catch (Exception e){ System.out.println("Error!"); } t3.start(); } public void run(){ System.out.println(date+" 正在泡茶"); try{ Thread.sleep(1000); }catch (Exception e){ } } } class HeatUpWater implements Runnable{ static Date date = new Date(); public void run(){ int time = 10; while(time != 0){ System.out.println(date+" 正在烧水"); time--; try{ Thread.sleep(1000); }catch (Exception e){ System.out.println("Heat up water is in the Error!"); } } } } class WashCup implements Runnable{ static Date date = new Date(); public void run(){ int time = 5; while(time != 0){ System.out.println(date+" 正在洗茶杯"); time--; try{ Thread.sleep(1000); }catch (Exception e){ } } } }
这篇关于关于编程的那些事-7的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)