在java中synchronized是多个线程共享同一段代码的锁。

多线程并发方法有:

1 加锁

2 信号量

3 阻塞---唤醒

当有多个线程并发执行同一块代码块时,加锁可以让一段时间内只有一个线程在执行,保证了业务的原子操作。

例如下面:

package andy.thread.traditional.test;/*** @author Zhang,Tianyou* @version 2014年11月8日 下午11:02:53*/// 使用synchronized加同步锁public class ThreadSynchronizedTest {public static void main(String[] args) {A a = new A();new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}a.printfA(Thread.currentThread().getName()+ "hello, my is A");}}}).start();new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}a.printfA(Thread.currentThread().getName()+ "hello, my is B");}}}).start();}static class A {public void printfA(String name) {for (int i = 0; i < name.length(); i++) {System.out.print(name.charAt(i));}System.out.println();}}}

共同执行printfA方法时,如果不加锁,会导致输出紊乱。结果如下

Thread-1hello, my is B
Thread-1hello, my is B
Thread-0hello, my is A
ThThread-0hello, my is A
read-1hello, my is B
Thread-1helTlhreoad-0hello, my is A
, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A

这是为了防止多线程并发执行时,确保只有一个在使用我们可以加同步锁。

synchronized(name){

// 加锁的代码块, name为锁标志

}

syschronized 可以加在方法里和方法内:

package andy.thread.traditional.test;/*** @author Zhang,Tianyou* @version 2014年11月8日 下午11:02:53*/// 使用synchronized加同步锁public class ThreadSynchronizedTest {public static void main(String[] args) {A a = new A();new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}a.printfA(Thread.currentThread().getName()+ "hello, my is A");}}}).start();new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}a.printfA(Thread.currentThread().getName()+ "hello, my is B");}}}).start();}static class A {public  void printfA(String name) {synchronized (A.class) {for (int i = 0; i < name.length(); i++) {System.out.print(name.charAt(i));}System.out.println();}}public synchronized void printfB(String name) {for (int i = 0; i < name.length(); i++) {System.out.print(name.charAt(i));}System.out.println();}}}

运行效果如下:

Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B
Thread-0hello, my is A
Thread-1hello, my is B

多线程之同步Synchronized相关推荐

  1. java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...

    多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...

  2. java多线程的同步

    http://www.blogjava.net/jadmin/archive/2010/03/18/360497.html 多线程的同步依靠的是对象锁机制,synchronized关键字的背后就是利用 ...

  3. java的知识点32——多线程 并发同步的 性能分析、快乐影院  订票操作

    多线程  并发  同步  性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...

  4. Android多线程之同步锁的使用

    本文主要介绍了Android多线程之同步锁的使用,分享给大家,具体如下: 一.同步机制关键字synchronized 对于Java来说,最常用的同步机制就是synchronized关键字,他是一种基于 ...

  5. Java多线程4:synchronized锁机制

    脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过 ...

  6. JAVA-初步认识-第十三章-多线程(验证同步函数的锁)

    一. 至于同步函数用的是哪个锁,我们可以验证一下,借助原先卖票的例子 对于程序中的num,从100改为400,DOS的结果显示的始终都是0线程,票号最小都是1. 票号是没有问题的,因为同步了. 有人针 ...

  7. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载

    使用Java多线程的同步机制编写应用程序 PDF 下载 本站整理下载: 相关截图: 主要内容: 一. 实验名称 使用Java多线程的同步机制编写应用程序 二. 实验目的及要求 1.理解并行/并发的概念 ...

  8. (四)Java中的多线程之间实现同步+多线程并发同步

    一.什么是线程安全问题 为什么有线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作(修改变量值)时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作时不会发生数据冲突问题. ...

  9. 多线程的实现与多线程的同步机制-让你轻松掌握多线程编程

    多线程的实现与多线程的同步机制 1. 多线程的实现 1.1 继承Thread类 创建一个类,这个类需要继承Thread类 重写Thread类的run方法(run方法中是业务代码) 实例化此线程类 调用 ...

  10. 3.1_15 JavaSE入门 P14 【多线程】同步、匿名内部类、死锁、生命周期

    相关链接 Excel目录 目录 P14 [进阶]多线程.同步.匿名内部类.死锁.生命周期 1 概述 1.1 并行&并发 1.2 主方法是多线程的吗? 2 多线程实现 2.1 方式一:继承Thr ...

最新文章

  1. SQUAD的rnet复现踩坑记
  2. 【Vue.js学习】生命周期及数据绑定
  3. bzoj2530 [POI2011]Party
  4. 给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
  5. WCDMA功率控制与BER/BLER
  6. 某条微博评论数据爬取
  7. 内网穿透到cs上线--部署到公网上!!
  8. opencv(二)图像像素提取及操作
  9. 怎么把英文翻译成中文?手机中英翻译的简单方法
  10. python怎么算阶乘_python专家写阶乘 ()用python计算阶乘
  11. easyUI右侧搜索面板下拉列表框样例
  12. nas 软件 性能测试,酷狼NAS 10T性能测试
  13. 怎么测ASEMI整流桥KBPC3510W电压,KBPC3510W怎么判别好坏
  14. [日语二级词汇]日语二级必会汉字总结3
  15. 聚观早报 | 首个国产新冠药停产;阿里巴巴创始人马云已回国内
  16. JavaFX使用自定义字体
  17. 基于tp5的微信app支付及回调
  18. (16) pytorch之Dropout
  19. Fiber resonator gyroscope: sensitivity and thermal nonreciprocity论文笔记
  20. 图片处理软件(含源代码,各种算法,学习非常棒)

热门文章

  1. MLOps- 吴恩达Andrew Ng Overview of the ML Lifecycle and Deployment Week1 论文等资料汇总
  2. 机器学习- 吴恩达Andrew Ng - week3-1 Classification
  3. Mac OS 区块链hyperledger环境搭建、环境架构介绍、环境如何用、部署 Chaincode、智能合约的调用
  4. 手动安装.app到模拟器simulator, iOS XCode 11
  5. 【易实战】Spring Cloud Greenwich Eureka:服务注册与发现
  6. 如何简单访问HTTP的GET、POST、PUT、DELETE,MOCK数据
  7. git reset/git checkout./撤销操作
  8. 对给定数组升或降排序
  9. python游戏程序中游戏对象是什么_Python游戏编程入门
  10. jar命令成功完成 java -jar 命令却提示“没有主清单属性”!