在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。
直接上代码
package com.crm.learn.thread; import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TestThread { public static CountDownLatch count = new CountDownLatch(2); public static Object o = new Object(); public static Long numx = new Long(0l); public static void main(String[] args) { Lock mainLock = new ReentrantLock(); try { VThread v1 = new VThread(1000000, mainLock); VThread v2 = new VThread(2000000, mainLock); v1.start(); v2.start(); count.await(); System.out.println(numx); } catch (Exception e) { e.printStackTrace(); } } }
线程类
package com.crm.learn.thread; import java.util.concurrent.locks.Lock; public class VThread extends Thread { private long addNum = 0; private Lock mainLock; public VThread(long addNum, Lock mainLock) { this.addNum = addNum; this.mainLock = mainLock; } public void run() { try { for (int i = 0; i < addNum; i++) { try { //如果锁定numx,数量 != 3000000 // synchronized (TestThread.numx) { // TestThread.numx++; // } //如果锁定o,数量 =3000000 // synchronized (TestThread.o) { // TestThread.numx++; // } //如果锁定TestThread.class,数量 =3000000 // synchronized (TestThread.class) { // TestThread.numx++; // } //使用锁对象,数量 =3000000 // mainLock.lock(); // TestThread.numx++; // mainLock.unlock(); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } finally { TestThread.count.countDown(); } } }
为啥
synchronized (TestThread.numx) {
TestThread.numx++;
}
这个值不为3000000
相关推荐
java synchronized的一些小实验,对帮助理解synchronized的使用有一定的帮助。
java多线程编程核心技术synchronized实例大全,同步方法,同步语句块,类锁,对象锁全都用代码来展现出来
Java并发编程学习宝典(漫画版),Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习宝典(漫画版)Java并发编程学习...
下面小编就为大家带来一篇解决Maven 项目报错 java.httpservlet和synchronized使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java中synchronized的使用,java中的锁锁的到底是什么?是括号里的代码块吗?肯定不是的;
[JAVA][synchronized的使用]
* [synchronized 使用方法](#synchronized-使用方法) * [Synchronized和ReentrantLock的区别](#synchronized和reentrantlock的区别) * [乐观锁](#乐观锁) * [悲观锁](#悲观锁) * [独占锁](#独占锁) * [共享锁]...
主要介绍了Java中使用synchronized关键字实现简单同步操作示例,本文起讲解了synchronized修饰函数、synchronized修饰代码块、synchronized修饰静态方法等内容,需要的朋友可以参考下
java锁机制Synchronized java锁机制Synchronized java锁机制Synchronized java锁机制Synchronized
java中synchronized用法
你还在用synchronized?线程安全相关知识深入剖析
java里面synchronized用法
Synchronized关键字的用法
synchronized的几种示例研究,方法加锁,代码块加锁(this和对象)以及静态方法加锁的示例和效果。基本上包含了synchronized的几种常用的方式。
Synchronized锁在Spring事务管理下,导致线程不安全。
synchronized 测试案例,同步一个对象或者多个对象的案例均有,还有成功和失败案例的对比
volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)
synchronized关键字在java中的重要性 以及常用的方法 还有它的详解
synchronized是很重要的,但是不少人不是很明白synchronized的用法,这里有详细的doc文档给大家参考
我自己的博客所附带的案例源码,我的博客标题名称是"synchronized并发讲解",关注我等待跟多更新