7.2.10.1有T1、T2、T3三个线程,如何保证T2在T1执行完后执行,T3在T2执行完后执行?

用join语句,在t3开始前join t2,在t2开始前join t1。

不过,这会破坏多线程的并发性,不建议这样做。

7.2.10.2 wait和sleep方法有什么不同?

对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。

sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。

而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才获取对象锁进入运行状态。

7.2.10.3 用Java多线程的思路解决生产者和消费者问题。

在本书7.2.4部分里,给出了通过wait和notify解决生产者消费者问题的相关代码,大家可以读下。

7.2.10.4 如何在多个线程里共享资源。

本书提到了synchronized,Lock和volatile三种方法,通过它们,可以控制多线程的并发,大家可以参考下。

7.2.10.5 notify和notifyAll方法有什么差别和联系?

通过wait和notify方法,我们同样可以通过控制“锁”的方式来实现多线程的并发管理。这两个方法需要放置在synchronized的作用域里(比如synchronized作用的方法或代码块里),一旦一个线程执行wait方法后,该线程就会释放synchronized所关联的锁,进入阻塞状态,所以该线程一般无法再次主动地回到可执行状态,一定要通过其它线程的notify(或notifyAll)方法唤醒它。

一旦一个线程执行了notify方法,则会通知那些可能因调用wait方法而等待对象锁的其他线程,如果有多个线程等待,则会任意挑选其中的一个线程来发出唤醒通知,这样得到通知的线程就能继续得到对象锁从而继续执行下去。

对于notifyAll,该方法会让所有因wait方法进入到阻塞状态的线程退出阻塞状态,但由于这些线程此时还没有获取到对象锁,因此还不能继续往下执行,它们会去竞争对象锁,如果其中一个线程获得了对象锁,则会继续执行,在它退出synchronized代码释放锁后,其它的已经被唤醒的线程则会继续竞争,以此类推,直到所有被唤醒的线程都执行完毕。

7.2.10.6 synchronized 和 ReentrantLock有什么不同?它们各自的适用场景是什么?

synchronized可以作用在方法和代码块上,但无法锁住由多个方法组成的业务块,而ReentrantLock可以保证业务层面的并发。

7.2.10.7 synchronized如果作用在一段代码上,那么是锁什么?

是锁方法所在的对象

Java核心技术及面试指南 多线程并发部分的面试题总结以及答案的更多相关文章

  1. Java核心技术及面试指南 线性表方面的面试题总结以及答案

    3.2.7.1 请用ArrayList实现Stack以及Queue的功能. public class ArrayListStack extends ArrayList implements Stack ...

  2. Java核心技术及面试指南 键值对方面的面试题总结以及答案

    3.3.5.1如何遍历HashMap对象?尤其请说明通过Iterator遍历HashMap对象的方法. 建议用这种方式: Set<Entry<String,String>>en ...

  3. Java核心技术及面试指南 多线程部分的基本面试题总结以及答案

    7.1.5 (1) 如果某个类已经继承(extends)了一个类,那么让这个类具有多线程的特性? implements runnable类或通过线程池 7.1.5  (2)启动一个线程是用run()还 ...

  4. Java核心技术及面试指南 流程控制方面的面试题答案

    2.2.5.1 switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 1 switch里可以用char,byte,short,int这些基本类型,以及它们的封装类.  ...

  5. Java核心技术及面试指南:视频列表

    如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1  JDK和JRE和JVM的区别,安装Java开发环境    1.1.1  第2页 2 视频1.2  编写第一个HelloWorld程序 ...

  6. Java核心技术及面试指南 数据库方面的面试题归纳以及总结

    5.1.7.1 事务的四大特性是什么? ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库 ...

  7. Java核心技术及面试指南的视频讲解和代码下载位置

    都是百度云盘,均无密码 代码下载位置: https://pan.baidu.com/s/1I44ob0vygMxvmj2BoNioAQ 视频讲解位置: https://pan.baidu.com/s/ ...

  8. Java核心技术及面试指南 JDBC部分的面试题总结以及答案

    5.5.1 你最近的项目里用到的是哪个数据?或你用过哪些数据库?或你对哪个数据库最熟悉? 通过这个问题,我们将会确认候选人是否在项目里用过数据库或JDBC. 5.5.2 你有没有建过表?或修改表里的字 ...

  9. Java核心技术及面试指南 集合部分总的面试题归纳以及答案

    3.6.1ArrayList和LinkedList有什么差别?在哪种场景里应当用ArrayList(或LinkedList)? 大家如果学过数据结构,这个问题不难回答:前者是基于数组,数组比较擅长索引 ...

随机推荐

  1. os模块walk方法

    1.os.walk import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remo ...

  2. 在SOUI中使用窗口自適應大小

    SOUI 2.5.0.3開始支持窗口大小自適應. 2.5.0.3以前,宿主窗口要適應顯示內容大小比較麻煩,因爲一般都是佈局內容適應宿主. SOUI 2.5.+開始支持線性佈局,線性佈局是借鑑的Andr ...

  3. react-native项目中禁止截屏与录屏

    在android/app/src/main/java/com/projname/MainActivity.java文件中的onCreate方法添加一下代码即可 import android.view. ...

  4. ConcurrentHashmap详解以及在JDK1.8的更新

    因为hashmap本身是非线程安全的,如果多线程对hashmap进行put操作的话,就会导致死循环等现象.ConcurrentHashMap主要就是为了应对hashmap在并发环境下不安全而诞生的,C ...

  5. notes for lxf(二)

    函数 abs()绝对值 max()返回最大值 raise 后接异常类 引发异常 函数返回多个值其实就是返回一个tuple 函数默认返回None 如果有必要检查参数类型用isinstance() typ ...

  6. Alpha冲刺(2/10)——2019.4.24

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  7. ZOJ 3876 JAVA

    题意: 输入年份,求五一假期一共放多少天假.五一假期默认5天,如果5月1号星期一,那么它之前有星期六星期天两天假期, 假期总长度就变成5+2,五一假期结束第二天也需要判断是不是假期. 思路: 使用Ja ...

  8. 关于阿里ICON矢量图(SVG)上传问题.

    注意点: 1. 存储为svg格式(建议使用存储为svg,不要使用导出为svg)2. 图像位置:链接(注意哦,不要点嵌入和保留编辑功能)---确定3. AI里面选中图形,点对象-路径-轮廓化描边 软件编 ...

  9. css实现文本超出两行隐藏

    当文字显示超出两行时,多余部分文字隐藏,用到的css属性如下代码 display: -webkit-box; text-overflow: ellipsis; overflow: hidden; -w ...

  10. JavaScript前端开发案例教程第二章练习

    一.打印金字塔: 这是各种语言学习之处都要做的一道题,最近在重新学习js,看到了这个题,做一下记录. 1 <script type="text/javascript"> ...