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

线程同步控制的几种方式

时间:2014-09-14 10:09:26      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:synchronized使用   reentrantlock使用   

在多线程对同一个函数进行调用时,如果不控制号锁的机制,往往就会产生数据混乱的情况,我们通常在控制线程的同步问题时,通常采用的方法:

1:使用synchronized进行控制访问。

2:使用ReentrantLock,进行上锁,方法体结束时进行解锁,因此得到控制。

下面我分别通过一个实例,来详细说明一下,上锁的方法,如果去掉锁机制之后,你会发现数据会出现混乱的情况。

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


public class TraditionalThreadSynchronized {
       public static void main(String[] args) {
		   TraditionalThreadSynchronized tt = new TraditionalThreadSynchronized();
		   tt.init();
	}
       
       public void init(){
    	   final Outeputer out = new Outeputer();
            new Thread(new Runnable() {
				@Override
				public void run() {
					while(true){
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					out.output2("robin222222222222222");
				}}
			}).start();
            
            new Thread(new Runnable() {
 				
				@Override
				public void run() {
					while(true){
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					out.output2("Tcent111111111");
				}}
			}).start();
       }
       static class Outeputer{
    	   Lock lock = new ReentrantLock();
    	   public void output(String name){
    		   synchronized (Outeputer.class) {
    			   int len = name.length();
        		   for(int i=0;i<len;i++){
        			   System.out.print(name.charAt(i));
        		   }
        		   System.out.println();
			}
    		  
    	   }
    	   public  void  output2(String name){
    		     //lock.lock();//这里自行进行测试
    			   int len = name.length();
        		   for(int i=0;i<len;i++){
        			   System.out.print(name.charAt(i));
        		   }
        		   System.out.println();
    		 // lock.unlock();
    	   }
    	   public void  output3(String name){
			   int len = name.length();
    		   for(int i=0;i<len;i++){
    			   System.out.print(name.charAt(i));
    		   }
    		   System.out.println();
		  
	   }
       }
}

线程同步控制的几种方式

标签:synchronized使用   reentrantlock使用   

原文地址:http://blog.csdn.net/u012516914/article/details/39267853

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!