获取内容资料
Java编程

图灵学院java架构师2期

)submit方法用于提交需要返回值的任务。线程池会返回一个future类型的对象,通过这个future对象可以判断任务是否执行成功,并且可以通过future的get方法来获取返回值,get方法会阻塞当前线程直到任务完成,而使用get(longtimeout,TimeUnitunit)方法则会阻塞当前线程一段时间后立即返回,这时候有可能任务没有执行完。

图灵学院java架构师2期

答案 A出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。但是在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。

CPU 完全可以在任务 1 和任务 2 之间来回切换,使任务 2 不必等到 5 秒再运行,系统的运行效率大大得到提升。这就是要使用多线程技术,线程可以理解成是在进程中独立运行的子任务。

并发高,执行时间短的任务配置尽可能少的线程:CPU核数 + 1并发高、业务执行时间长的任务,对于系统的压力很大,应尽可能通过架构的优化,而不是线程池的配置解决。例如转换为异步削峰解藕并发不高,业务时间长:如果任务长时间消耗在IO操作上,应加大线程池数量,不让CPU闲下来,尽量执行更多的任务如果任务长时间消耗在计算上,应减少CPU线程的切换,设置和CPU核数一致的线程数量。《Java并发编程实战》。

阻塞( block ):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有机会再次获得cpu timeslice转到运行( running )状态。

D 方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注