码迷,mamicode.com
首页 > 编程语言 > 详细

线程安全--- synchronized

时间:2015-04-03 15:01:27      阅读:135      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!