黑马程序员_多线程的死锁和多线程下的单例设计模式
来源:互联网 发布:xp系统网络共享密码 编辑:程序博客网 时间:2024/06/03 08:15
多线程的单例设计模式
//饿汉式class Single{ private static final Single s=new Single(); private Single(){} public static Single getInstance(){ return s; }}//懒汉式class Single2{ private static Single2 s=null; private Single2(){} public static Single2 getInstace2(){ if(s==null){ synchronized (Single2.class) {//使用这种加一个判断条件的写法,可以解决效率低的问题, //也可以解决安全性问题 s=new Single2(); } } return s; }}public class Thread21_1 { public static void main(String[] args) { }}
多线程的死锁
死锁的常见情景之一:同步的嵌套:有锁A和锁B。需要A,B同时才能执行好一段代码。在多线程的情况下。就2个线程。当线程1拿住A锁的同时想拿B锁。但是,这个时候,线程2拿住B锁想拿A锁。他们的代码都没有做完,彼此都不放自己手上的锁。这个时候,线程1和线程2都不能做自己想做的事情,就死锁了。
实例一
class Ticket implements Runnable{ private int num=400; Object obj=new Object(); public boolean flag=true; public void run(){ // System.out.println("this:"+this); if(flag){ while(true){ synchronized(obj){ show(); } } }else{ while(true){ show(); } } } public synchronized void show(){ synchronized(obj){ if(num>0){ try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();} System.out.println(Thread.currentThread().getName()+"....sale...."+ num--); } } }}public class Thread22_1 { public static void main(String[] args) { Ticket t=new Ticket(); Thread t1=new Thread(t); Thread t2=new Thread(t); t1.start(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } t.flag=false; t2.start(); }}
实例二
class Test implements Runnable{ private boolean flag; Test(boolean flag){ this.flag=flag; } public void run(){ if(flag){ while(true) synchronized (MyLock.locka) { System.out.println(Thread.currentThread().getName()+"..if locka..."); synchronized(MyLock.lockb){ System.out.println(Thread.currentThread().getName()+"..if lockb..."); } } }else{ while(true) synchronized (MyLock.lockb) { System.out.println(Thread.currentThread().getName()+"..else lockb..."); synchronized(MyLock.locka){ System.out.println(Thread.currentThread().getName()+"..else locka..."); } } } }}class MyLock{ public static final Object locka=new Object(); public static final Object lockb=new Object();}public class Thread22_2 { public static void main(String[] args) { Test a=new Test(true); Test b=new Test(false); Thread t1=new Thread(a); Thread t2=new Thread(b); t1.start(); t2.start(); }}
0 0
- 黑马程序员_多线程的死锁和多线程下的单例设计模式
- 黑马程序员_多线程中的Lock锁,死锁以及单例设计模式分析
- 黑马程序员_单例设计模式&多线程
- 黑马程序员_多线程的死锁和等待唤醒机制
- 黑马程序员_七、多线程及String类和单例设计模式
- 黑马程序员 多线程 单例设计模式
- 黑马程序员_Java基础_线程基础,创建,同步(单例设计模式的同步),死锁
- 黑马程序员——多线程和单例设计模式
- 黑马程序员 多线程及其单例模式设计和GUI
- 多线程下的单例设计模式
- 黑马程序员_多线程死锁
- 黑马程序员_多线程(死锁)
- 黑马程序员_多线程及单例模式
- 黑马程序员_多线程及单例模式
- 黑马程序员_单线程和多线程
- 黑马程序员_java语言_多线程和设计模式
- Lesson_for_java_day19--java的多线程(多线程概念、单例设计模式、死锁)
- 多线程、单例设计模式、死锁
- 泰勒公式(Taylor's Formula)
- C++遍历文件或文件夹
- 算法与数据结构总结
- 本科写过的一些图像处理项目
- Leetcode-161.One Edit Distance
- 黑马程序员_多线程的死锁和多线程下的单例设计模式
- Docker实战(九):Docker安装ELK环境
- 和中位数有关的构造
- CentOS 7 mysql的yum源
- Android Shell command to send broadcast.
- python学习笔记----基本语法代码过手1
- 从Oracle Database 角度来看浪潮天梭K1主机的操作系统选择
- 填坑系列: jQuery解决复选框只能全选一次
- ES6学习——新的语法:数组元素Spread