前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线程同步控制的几种方式

线程同步控制的几种方式

作者头像
用户5166556
发布2019-04-16 12:17:01
8150
发布2019-04-16 12:17:01
举报

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

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

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

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

代码语言:javascript
复制
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();
		  
	   }
       }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年09月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档