浅析Java多线程同步synchronized
时间:2019-04-13
本文章向大家介绍浅析Java多线程同步synchronized,主要包括浅析Java多线程同步synchronized使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源
代码例子:
public class SingleThread { int num=10; public void add(){ while(num<13){ num++; try{ Thread.sleep(1000); } catch(Exception e){ System.out.println("中断"); } System.out.println(num); } } public static void main(String[] args){ Thread thread = Thread.currentThread(); //获取当前运行的线程对象 thread.setName("单线程"); //线程重命名 System.out.println(thread.getName()+"正在运行"); SingleThread st=new SingleThread(); st.add(); } }
多线程安全,synchronized同步代码块
synchronized(对象){}; //同步代码块
synchronized 返回值 方法名(){}; //同步方法
class One { int num=10; public void add(){ synchronized(this){ //同步代码块,同步方法也可以实现效果synchronized void add(){}; num++; try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("中断"); } System.out.println(num); } } } class Two implements Runnable{ One one = new One(); @Override public void run() { one.add(); //调用add方法 } } public class Synch{ public static void main(String[] args) { Two two = new Two(); Thread t1 = new Thread(two); //创建三个子线程 Thread t2 = new Thread(two); Thread t3 = new Thread(two); t1.start(); t2.start(); t3.start(); } }
注意:观察去除synchronized关键字的运行结果区别!
正常运行结果:
11
12
13
- React 介绍及实践教程
- ios入门之界面基础
- 技术分享 | 深入分析APPCMS<=2.0.101 sql注入漏洞
- React Native布局之FlexBox
- 图算法之bfs、dfs、prim、Dijkstra
- 深入理解Android Build系统
- Mac Jenkins搭建 Android/IOS自动打包环境
- javascript 红皮高程(11)
- javascript 红皮高程(8)
- javascript 红皮高程(7)
- javascript 红皮高程(17)-- 左移(<<)
- javascript 红皮高程(17)-- 按位异或(XOR)
- javascript 红皮高程(17)
- javascript 红皮高程(16)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux共享库、静态库、动态库详解
- strace详解及实战
- 推荐一个比crontab更好用的东西:crongo
- Vue 自定义指令
- IDEA + Spring Boot 的三种热加载方案,看完弄懂,不用加班~
- 开篇讲--关于Kali的碎碎念
- Mysql服务器SQL模式 (官方精译)
- 如何用Prometheus和Grafana监控Kubernetes集群?
- linux实时文件事件监听--inotify
- MySQL事务原理&实战【官方精译】
- 俗话:MySQL索引
- 基于飞桨复现CVPR 2016 MCNN的过程解析:教你更精确估算人流密度
- mysql各种引擎对比、实战
- 接球小游戏玩腻了?换个姿势让PaddleX帮你吊打游戏系统
- mysql事务隔离级别详解和实战