黑马程序员——多线程(下)
来源:互联网 发布:张丕林 知乎 编辑:程序博客网 时间:2024/06/15 13:26
lock锁简介
Lock锁同样可以完成代码同步的任务。
相较于synchronized方式,Lock锁的出现使同步操作更为灵活。无需使用限制性强的代码块。
Lock同样为抽象类,需要使用其子类ReentrantLock的对象完成方法调用。
主要方法:
public void lock()获取锁
public void unlock() 释放锁
线程死锁
在多线程的代码编辑过程中,由于考虑得不够周全,会出现死锁的情况。原因分析:
线程1将锁1锁住,线程2将锁2锁住,而线程1要继续执行锁2中的代码,线程2要继续执行锁1中的代码,但是此时,两个锁均处于锁死状态。最终导致两 线程相互等待,进入无限等待状态。
有同步代码块的嵌套动作。
解决方法:
不要写同步代码块嵌套
线程死锁代码:
等待唤醒机制
当出现对同一资源的生产与消费时,可以使用多线程完成对同一资源的操作。而消费者需要等待生产者生产后才能消费,生产者也需要等待消费者消费后才能生产。于是出现了生产者消费者问题。这时可以使用等待唤醒机制完成相关需求。
涉及方法:
涉及并非是Thread类的方法,而是Object类的两个方法:因为锁可以为共享数据本身可以是任意的对象,在runnable中进行等待唤醒当前所在线程。
等待:
public final void wait() throws InterruptedException
让当前线程进入等待状态,如果线程进入该状态,不唤醒或打断,不会解除等待状态。
进入等待状态时会释放锁。
唤醒:
public final void notify()
唤醒正在等待的线程。
继续等待之后的代码执行。
sleep与wait的区别:
sleep指定时间,wait可指定可不指定。
sleep释放执行权,不释放锁。因为一定可以醒来。
wait释放执行权与锁。
线程组
多个线程出现时,可以将线程分组,统一处理。
涉及线程组类:ThreadGroup
注意:
线程组可以包含线程或者线程组。
当前线程只能访问所在线程组或者子组。不能访问父组或者兄弟组。
如果没有指定线程组,则属于main线程组。
主要方法:
public final String getName()
public final void setDaemon(boolean daemon)
等其他统一设置方法
无线程添加方法,设置线程组在Thread构造方法中
单例设计模式
内存当中只存在一个实例对象。单例设计模式要求。
构造方法私有化
定义了自己类型的静态私有成员变量
对外提供公共的、静态的获取实例方法
实例创建方式分为懒汉式与饿汉式
懒汉式时,需要考虑线程安全问题
懒汉式:
class Single{
private static Single s = null;
private Single(){}
public static Single getIntance(){
if (s == null){
s = new Single();
}
return s;
}
}
饿汉式:
class Single{
private static Single s = new Single();
private Single(){}
public static Single getIntance(){
return s;
}
}
- 黑马程序员——多线程(下)
- 黑马程序员——多线程(下)
- 黑马程序员_Java面对对象——多线程(下)
- 黑马程序员——Java基础__多线程(下)
- 黑马程序员——Java基础--------多线程(下)
- 黑马程序员-多线程(下)
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- 黑马程序员—多线程
- Hello CSDN!
- Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: '' for column 'createtime'
- POJ 2466 Chessboard(二分图+前向星)
- UICollectionViewLayout
- sb托约束,top layGuide导致总是不能紧贴屏幕上端的问题
- 黑马程序员——多线程(下)
- iOS 推送消息的原理
- iOS-遇见的面试题总结与分析
- 常量、变量、格式化控制符和转义字符的使用规范及注意事项
- 七牛---上传crc32校检说明与用法
- 46. PHP 数据库
- C语言关于格式说明里包含回车
- mysql表类型(引擎)介绍
- C#接口的显示与隐式