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. 动态网页获取ajax,post方法,url里面不直接显示参数

    记录一下,爬去ajax数据时,需要注意一下是post方法还是get方法,get方法就正常做就行了,但是post方法的话,需要这样,如下 a = requests.request('post',url) ...

  2. Kali Linux & Metasploit Framework

    systemctl enable postgresql.service systemctl start postgresql.service # systemctl status postgresql ...

  3. ISP PIPLINE (十二) Sharpening

    什么是sharpening? 不解释,从左到右为sharpen , 从右到左为blur. 简单理解为边缘增强,使得轮廓清晰.增强对比度. 如何进行sharpening? 下面是实际sharpen的过程 ...

  4. DEDECMS织梦文章摘要批量更改方法

    我们建站有时候需要直接把数据库导入,只要修改一下基本的名称信息就可以直接用,但是遇用到一些问题.比如文章摘要不会随着文章内容的更新而更新.织梦(dede)在添加文章的时候会自动生成文章摘要,如果重新修 ...

  5. c# asp.net mvc使用斑马GK888t打印机打印标签

    前言 c#语言,asp.net mvc,南京都昌电子病历模板工具(类似word),斑马GK888t,打印手腕带和标签纸. 实现步骤为:在页面上显示一个或多个都昌模板工具,点击页面上的button,出现 ...

  6. vector的用法小结(待补全

    1.vector的好处 支!持!删!除! 节!省!内!存! 2.一点基础的小操作 ①插入操作:v.push_back(x) 在尾部插入元素x: ②删除操作 : v.erase(x)删除地址为x的元素 ...

  7. MyBatis(八)联合查询 级联属性封装结果集

    (1)接口中编写方法 public Emp getEmpandDept(); (2)编写Mapper文件 <resultMap type="com.eu.bean.Emp" ...

  8. 关于css盒子模型和BFC的理解

    CSS盒子模型 包含元素内容(content).内边距(padding).边框(border).外边距(margin) 一般元素总宽度 = element的width+padding的左右边距+mar ...

  9. PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)

    Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库 (本blog部分图片及代码来自网络) 这是一个支持图像存储.显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的 ...

  10. DP-01背包

    题目传送门 题目类似01背包,但存在一个选取先后不同价值会有损耗,所有对物品按易损耗的程度从大到小排个序来顺序选取. #include<bits/stdc++.h> using names ...