zoukankan      html  css  js  c++  java
  • 从头认识java-18.6 synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题

    这一章节我们来介绍在其它对象上同步与ThreadLocal。

    前一章节我们使用了

    1.synchronized在其它对象上同步

    class ThreadA implements Runnable {
    	private Object object = new Object();
    
    	private synchronized void test() throws InterruptedException {
    		System.out.println("dosomething");
    		Thread.sleep(5000);
    		synchronized (object) {
    			System.out.println("dosomething");
    		}
    	}
    
    	@Override
    	public void run() {
    		while (true) {
    			try {
    				test();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }


    2.ThreadLocal来消除共享对象的同步问题

    package com.ray.ch18;
    
    public class Test {
    
    	public static void main(String[] args) {
    		new Thread(new Accessor(new ThreadLocalVarHoder())).start();
    		new Thread(new Accessor(new ThreadLocalVarHoder())).start();
    		new Thread(new Accessor(new ThreadLocalVarHoder())).start();
    	}
    }
    
    class Accessor implements Runnable {
    	private ThreadLocalVarHoder threadLocalVarHoder;
    
    	public Accessor(ThreadLocalVarHoder threadLocalVarHoder) {
    		this.threadLocalVarHoder = threadLocalVarHoder;
    	}
    
    	@Override
    	public void run() {
    		for (int i = 0; i < 3; i++) {
    			threadLocalVarHoder.increment();
    			System.out.println(Thread.currentThread().getName() + " "
    					+ threadLocalVarHoder.get());
    		}
    	}
    
    }
    
    class ThreadLocalVarHoder {
    	private static ThreadLocal<Integer> value = new ThreadLocal<Integer>() {
    		protected Integer initialValue() {
    			return 0;
    		}
    	};
    
    	public void increment() {
    		value.set(value.get() + 1);
    	}
    
    	public int get() {
    		return value.get();
    	}
    }

    输出:

    Thread-0 1
    Thread-0 2
    Thread-0 3
    Thread-1 1
    Thread-2 1
    Thread-2 2
    Thread-2 3
    Thread-1 2
    Thread-1 3


    从上面的输出能够看见。每个线程都是读取自己线程上面的副本的值,它的改动这些不涉及原来的对象。


    总结:这一章节简介了synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题。


    这一章节就到这里,谢谢。

    -----------------------------------

    文件夹


  • 相关阅读:
    学习lua(一) 认识了解lua
    Lua For Windows 环境配置及使sciTE支持中文,使用editplus作为编辑工具
    Lua代码实例()
    Lau实例代码(二)
    (转)Nios II的Boot过程分析(I)
    Altera和Xilinx的参考设计资源
    (转)如何在FPGA设计环境中加时序约束
    (转)FPGA时序约束的几种方法
    (转)Nios ii设备管理分析
    (转)Nios II的Boot过程分析(II)
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7000657.html
Copyright © 2011-2022 走看看