首页 > 编程语言 > 详细

线程安全--- synchronized

时间:2015-04-03 14:59:27      阅读:226      评论:0      收藏:0      [点我收藏+]
package com.Thread;
 
class W12306 implements Runnable{
       private boolean flag = true;
       private int num =10;
       @Override
       public void run() {
             while(flag ) {
                  test6();
            }
      }
      
       //线程不安全,锁定不正确,一般锁定对象
       public void test6() {
             if(num <=0) {
                   flag = false ;
                   return;
            }
             synchronized(this ) {
                   try {
                        Thread. sleep(500);//模拟网络延时,最后取到了0和-1
                  } catch (InterruptedException e) {
                        e.printStackTrace();
                  }
                  System. out.println(Thread.currentThread().getName() + "抢到了" + num--);
            }
 
      }
      
       //线程不安全,锁定资源不正确
       public void test5() {
             synchronized((Integer)num ) {
                   if(num <=0) {
                         flag = false ;
                         return;
                  }
                   try {
                        Thread. sleep(500);//模拟网络延时,最后取到了0和-1
                  } catch (InterruptedException e) {
                        e.printStackTrace();
                  }
                  System. out.println(Thread.currentThread().getName() + "抢到了" + num--);
            }
 
      }
 
      
       //线程不安全,锁定范围过小
       //a b c
       public void test4() {
             synchronized(this ) {
                   //b
                   if(num <=0) {
                         flag = false ;
                         return;
                  }
            }
             //b
             try {
                  Thread. sleep(500);//模拟网络延时,最后取到了0和-1
            } catch (InterruptedException e) {
                  e.printStackTrace();
            }
            System. out.println(Thread.currentThread().getName() + "抢到了" + num --);
             //a-->1
 
      }
 
      
       //线程安全,锁定方法块
       public void test3() {
             synchronized(this ) {
                   if(num <=0) {
                         flag = false ;
                         return;
                  }
                   try {
                        Thread. sleep(500);//模拟网络延时,最后取到了0和-1
                  } catch (InterruptedException e) {
                        e.printStackTrace();
                  }
                  System. out.println(Thread.currentThread().getName() + "抢到了" + num--);
            }
 
      }
 
      
       //线程安全,锁定方法
       public synchronized void test2() {
             if(num <=0) {
                   flag = false ;
                   return;
            }
             try {
                  Thread. sleep(500);//模拟网络延时,最后取到了0和-1
            } catch (InterruptedException e) {
                  e.printStackTrace();
            }
            System. out.println(Thread.currentThread().getName() + "抢到了" + num --);
 
      }
      
       //线程不安全
       public void test1() {
             if(num <0) {
                   flag = false ;
            }
             try {
                  Thread. sleep(500);//最后取到了0和-1
            } catch (InterruptedException e) {
                  e.printStackTrace();
            }
            System. out.println(Thread.currentThread().getName() + "抢到了" + num --);
 
      }
}
public class Synchronized_ {
       public static void main(String[] args) {
            W12306 w = new W12306();
            
            Thread t1 = new Thread(w, "甲" );
            Thread t2 = new Thread(w, "已" );
            Thread t3 = new Thread(w, "丁" );
            
            t2.start();
            t1.start();
            t3.start();
      }
}

线程安全--- synchronized

原文:http://www.cnblogs.com/king-/p/4389738.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!