多线程之其他
来源:互联网 发布:app ui源码 编辑:程序博客网 时间:2024/06/03 23:01
一、数据类型String的常量池特性
在JVM中具有String常量池缓存功能。将Synchronized(string)和String联合使用时,需要注意常量池带来的一些例外。当string的值都相等时,表明两个线程持有的是相同的锁,其中一个线程不停下来,另一个线程将永远不能被执行。因此大多数情况下,synchronized代码块不使用String作为锁对象,而改用其他,比如new Object实例化一个Object对象。
二、同步synchronized方法容易造成死锁,可以用同步块来解决这样的问题。
三、多线程的死锁
不同的线程都在等待根本不可能被释放得锁,从而导致所有任务都无法继续完成。只要互相等待对方释放锁就有可能出现死锁。
DealThread.java
/* * 互相等待对方释放锁就有可能出现死锁。 */public class DealThread implements Runnable{public String username;public Object lock1=new Object();public Object lock2=new Object();public void setFlag(String username){this.username=username;}@Overridepublic void run() {if(username.equals("aa")){synchronized (lock1) {try{System.out.println("username="+username);Thread.sleep(3000);}catch(InterruptedException e){e.printStackTrace();}synchronized (lock2) {System.out.println("按照locak1->locak2代码顺序执行");}}}if(username.equals("bb")){synchronized (lock2) {try{System.out.println("usernmae="+username);Thread.sleep(3000);}catch(InterruptedException e){ e.printStackTrace();}synchronized (lock1) {System.out.println("按照lock2->locak1代码顺序执行");}}}}}Run.java
public class Run {public static void main(String[] args) {try{DealThread t1=new DealThread();t1.setFlag("aa");Thread thread1=new Thread(t1);thread1.start();Thread.sleep(100);t1.setFlag("bb");Thread thread2=new Thread(t1);thread2.start();}catch(InterruptedException e){e.printStackTrace();}}}结果如下:
原因就是两个线程都在互相等待对方释放锁。
阅读全文
0 0
- 多线程之其他
- java多线程之其他知识简介
- Java多线程之线程其他类
- iOS多线程之8.NSOPeration的其他用法
- Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
- Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask
- Java多线程系列-多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask
- Java多线程系列-多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
- 多线程--基础篇4--其他
- 多线程 - 08.GCD其他使用
- Java多线程(五):多线程其他知识
- 原则之:其他
- android sample 之 其他
- SQL基础教程之其他
- redis之其他
- python基础之其他
- scrapy之其他
- 多线程BUG捕捉之:由于其他线程拥有此对象,因此调用线程无法对其进行访问
- Unity 判断目标分辨率是16比9还是16比10
- Android任务栈的完全解析
- 不让scrollerView里的editext 不自动软键盘,软键盘弹起不顶起底部控件,不遮挡editview
- json格式化后的日期转换为DateTime
- Java简介—动力节点Java学院
- 多线程之其他
- UVALive
- hihocoder167周-最小公倍数-数组重排
- 查看视频播放时的分辨率
- MAC本地服务器使用和搭建修改
- react 开发规范
- ADI读书活动第四十二期:AD 623使用心得讨论
- 新手--网络访问的json数据存储在本地文件夹, 离线使用
- MT2503资料——FAQ文档