从头认识java-18.6 synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题
2017-06-13 13:29
381 查看
这一章节我们来介绍在其它对象上同步与ThreadLocal。
前一章节我们使用了
1.synchronized在其它对象上同步
2.ThreadLocal来消除共享对象的同步问题
输出:
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来消除共享对象的同步问题。
这一章节就到这里,谢谢。
-----------------------------------
文件夹
前一章节我们使用了
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来消除共享对象的同步问题。
这一章节就到这里,谢谢。
-----------------------------------
文件夹
相关文章推荐
- 从头认识java-18.6 synchronized在其他对象上同步和ThreadLocal来消除共享对象的同步问题
- 从头认识多线程-2.18 synchronized (new object())同步时各种不同类别的监视器以及其引起的问题(常量池的影响)
- 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
- 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- 从头认识java-17.4 详解同步(3)-对象锁
- 若还 不懂 java synchronized 同步,锁,对象wait,notify问题,看完这两段代码,解决问题。
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- Java线程(七):锁对象Lock-同步问题更完美的处理方式
- java synchronized同步方法调用另一个同步方法,锁机制问题
- Java线程同步:synchronized锁住的是代码还是对象
- 记录Java多线程的同步问题---synchronized关键字的使用
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- Java单实例对象或单例模式下的同步问题
- Java线程同步:synchronized锁住的是代码还是对象
- java核心知识点学习----多线程间的数据共享和对象独立,ThreadLocal详解
- Java单例对象同步问题探讨
- Java线程(七):锁对象Lock-同步问题更完美的处理方式
- synchronized解决多线程共享数据同步问题
- Java线程同步:synchronized锁住的是代码还是对象