多线程(第二天)

---恢复内容开始---

锁定和监视

只要有实例就会相对有一个锁定。因此不是说因为某个实例的synchronized方法正在执行中,导致无法执行其他的实例的synchronized方法

线程共享互斥的架构称为监视(monitor),而获取锁定有时也称为“持有监视”(own)

synchronized阻挡

只想启动方法里一部分的线程,而非启动整个方法时 则可以启动synchronized阻挡

synchronized(){

....

}

则可以把获取锁定的实例传给“表达式”这部分。如果更精密控制共享互斥的范围,则需要使用synchronized阻挡

synchronized方法和synchronized阻挡

synchronized void method(){

、、、

}

在功能上,它跟下面这个synchronized阻挡为主的方法有异曲同工之妙

void method(){

synchronized(this){

..

}

}

换句话说,synchronized实例方法是使用this锁定去做线程的共享互斥

synchronized类方法和synchronized阻挡

假设现在有一个synchronized类方法,synchronized有限制同时只能让一个线程执行这个部分跟synchronized实例方法一样。但是利用synchronized类方法的锁定跟利用synchronized实例方法并不相同

class something{

static synchronized void methods(){

  。。。。

}

}

在功能上它跟下面方法有异曲同工之妙

class something{

static void method(){

synchronized(something.class)

}

}

换句话说,synchronized类方法是使用该类的类对象的锁定去做线程的共享互斥。something.class是对应something类的java.lang.Class类的实例

synchronized语句

Java规格 The Java Language Specification则是把synchronized阻挡叫synchronized语句 (synchronized statement)

线程的协调

简单型的共享互斥:当有一个线程正在执行synchronized方法时,其他线程无法执行该方法。

等候:若该空间有空闲则写入数据,若非空闲则等候直到空出为止

通知:当该空间已空出,则通知正在等候的线程

wait 让线程乖乖等候notify  notifyAll  启动等候中线程的方法

wait set   线程的休息室

所有实例都有一个wait set   是一个在执行该实例的wait方法时,操作停止的线程的集合

执行wait方法时 线程便会暂时停止操作 进入wait set 除非

1.有其他线程以notify方法唤醒该线程

2.有其他线程以notifyAll唤醒该线程

3.有其他线程以interrupt方法唤醒该线程

4.wait方法已经到期

obj.wait();

则目前的线程会暂时停止执行,进入 obj的wait set   这个操作称为:线程在obj的wait

如果实例方法里还有如下的语句  wait();则其意义同 this.wait();

故执行wait()的线程就会进入this的wait set 此时 就变成了线程在this上的wait

如欲执行wait()方法,线程需获取锁定(这是规则),但是当线程进入wait set时 ,已经释放了该实例的锁定。

wait set

一个虚拟的概念 它既不是实例的字段 也不是可以获取在实力上wait中线程列表的方法

时间: 2024-10-11 00:52:46

多线程(第二天)的相关文章

“全栈2019”Java多线程第二十五章:生产者与消费者线程详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第二十五章:生产者与消费者线程详解 下一章 "全栈2019"Java多线程第二十六章:同步方法生产者与消费者线程 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"

“全栈2019”Java多线程第二十六章:同步方法生产者与消费者线程

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第二十六章:同步方法生产者与消费者线程 下一章 "全栈2019"Java多线程第二十七章:Lock获取lock/释放unlock锁 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorha

“全栈2019”Java多线程第二十七章:Lock获取lock/释放unlock锁

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第二十七章:Lock获取lock/释放unlock锁 下一章 "全栈2019"Java多线程第二十八章:公平锁与非公平锁详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回

“全栈2019”Java多线程第二十八章:公平锁与非公平锁详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第二十八章:公平锁与非公平锁详解 下一章 "全栈2019"Java多线程第二十九章:可重入锁与不可重入锁详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"J

秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex? 使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线程并等待其运行完毕,子线程就输出它的线程ID号然后输出一句经

秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别

本文将带领你与多线程作第一次亲热接触,并深入分析CreateThread与_beginthreadex的本质差别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex究竟有什么差别,在实际的编程中究竟应该使用CreateThread还是_beginthreadex? 使用多线程事实上是很easy的,以下这个程序的主线程会创建了一个子线程并等待其执行完成,子线程就输出它的线程ID号然后输出一句经典名言--Hello World.整个程序的代码很

【转载】5天不再惧怕多线程——第二天 锁机制

当多个线程在并发的时候,难免会碰到相互冲突的事情,比如最经典的ATM机的问题,并发不可怕,可怕的是我们没有能力控制. 线程以我的理解可以分为三种 ① 锁. ② 互斥. ③ 信号. 好,这一篇主要整理"锁",C#提供了2种手工控制的锁 一:  Monitor类 这个算是实现锁机制的纯正类,在锁定的临界区中只允许让一个线程访问,其他线程排队等待.主要整理为2组方法. 1:Monitor.Enter和Monitor.Exit 微软很照护我们,给了我们语法糖Lock,对的,语言糖确实减少了我们

秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. ----------------------

java练习多线程

1.创建多线程方式继承Thread类 class ThreadDemo1{ public static void main(String args[]){ Demo1 d1 = new Demo1(); d1.start(); Demo1 d2 = new Demo1(); d2.start(); } } class Demo1 extends Thread{ public void run(){ show(); } public void show(){ while(true){ try{Th

秒杀多线程第一篇 多线程笔试面试题汇总

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. -------------------------------------华丽的分割线