黑马程序员 多线程总结1

来源:互联网 发布:淘宝交易平台 编辑:程序博客网 时间:2024/06/18 15:21

---------------------------------------------------------------- android培训、java培训、期待与您交流! ----------------------------------------------------------------------------------------
多线程总结:
一,检验你的程序是否存在安全隐患可以通过
try{Thread.sleep()} catch(Exception e){} 检测看会不会出现意外的结果
二,实现同步两种方式:
1,同步代码块
   synchronized(锁)
   {
   }
   锁:可以是自己创建的对象; 可以是“字节码对象” 即类名.class

2,同步函数
   方法的返回值类型前加synchronized 其实他使用的锁是this
   public synchronized void show(){}

三,死锁
当同步中还嵌套同步的时候就可能出现死锁,即一个线程拥有了一个锁后,想拥有另一个锁,而另一个锁被另一个线程拥有,两个线程都拿着自己的锁不放,而想拥有别人的锁。
示例:
/*
需求:编写一个死锁程序。
分析:死锁,需要两个锁,或者两类公共资源。
两个人要完成寻宝比赛,必须先找拿到资源一,再找到资源二,方可完成任务。

 

class DeadLock {public static void main(String[] args) {Thread p1=new Thread(new Dead(true),"p1");Thread p2=new Thread(new Dead(false),"p2");p1.start();p2.start();}}class Resource{static Object resource1=new Object();static Object resource2=new Object();}class Dead implements Runnable{public boolean flag;public Dead(boolean f){this.flag=f;}  public void run(){while(true){if(flag){synchronized(Resource.resource1){System.out.println("Resource.resource1"+"---"+Thread.currentThread().getName());synchronized(Resource.resource2){System.out.println("Resource.resource2"+"---"+Thread.currentThread().getName());}}}else{synchronized(Resource.resource2){System.out.println("Resource.resource2"+"---"+Thread.currentThread().getName());synchronized(Resource.resource1){System.out.println("Resource.resource1"+"---"+Thread.currentThread().getName());}}}}}}

 

---------------------------------------------------------------- android培训、java培训、期待与您交流! ----------------------------------------------------------------------------------------

原创粉丝点击