synchronized 线程同步
synchronized 通常用来形容一次方法的调用,调用一旦开始,调用者必须等到方法调用返回后,才能继续执行后续的操作。
1.demo
package demo1;
public class MyThread extends Thread {
private int count = 5;
@Override
public void run() {
count--;
System.err.println("∽"+currentThread().getName()+"count:"+this.count);
}
public static void main(String[] args){
MyThread myThread = new MyThread();
Thread t1 = new Thread(myThread,"myThread-1");
Thread t2 = new Thread(myThread,"myThread-2");
Thread t3 = new Thread(myThread,"myThread-3");
Thread t4 = new Thread(myThread,"myThread-4");
Thread t5 = new Thread(myThread,"myThread-5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start(); }
}
结果输出:
∽myThread-1count:2
∽myThread-4count:1
∽myThread-2count:2
∽myThread-3count:2
∽myThread-5count:0
描述:5个线程都会去对这个 count 变量进行操作,但是出现了重复的数据,说明没有进行同步、共享。
2.demo:使用 synchronized 关键字
package demo1;
public class MyThread extends Thread {
private int count = 5;
@Override
public synchronized void run() {
count--;
System.err.println("∽"+currentThread().getName()+"count:"+this.count);
}
public static void main(String[] args){
MyThread myThread = new MyThread();
Thread t1 = new Thread(myThread,"myThread-1");
Thread t2 = new Thread(myThread,"myThread-2");
Thread t3 = new Thread(myThread,"myThread-3");
Thread t4 = new Thread(myThread,"myThread-4");
Thread t5 = new Thread(myThread,"myThread-5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
结果输出:
∽myThread-1count:4
∽myThread-3count:3
∽myThread-2count:2
∽myThread-4count:1
∽myThread-5count:0
描述:输出的结果没有重复的,说明同步生效了。
1.当多个线程都去访问 MyThread 的run 方法的时候,都会以队列的的方式去进行访问处理(CPU的分配)。
2.一个线程要执行 synchronized 方法修饰的代码块:都会去尝试去获取锁(object的锁),如果拿到锁,则执行 synchronized 代码的内容;
如果拿不到,则会不断的去尝试获取这把锁,一直到拿到为止 (多个线程去尝试获取这把锁,就行形成竞争、排队的问题)。
synchronized 线程同步的更多相关文章
- java多线程之synchronized(线程同步)
一.线程同步,主要应用synchronized关键字: public class TraditionalThreadSynchorinzed { public static void main(Str ...
- java synchronized 线程同步机制详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this ...
- Java synchronized 线程同步
同步方法 class MyTheard4 implements Runnable{ private int ticket; public MyTheard4(int ticket) { this.ti ...
- synchronized 线程同步-类级别锁定
1.demo 说明:代码中通过 printNum 方法传入参数判断 a.b 分别对 num 这个参数的值进行了修改. package demo1; import sun.applet.Main; pu ...
- Java线程(二):线程同步synchronized和volatile
上篇通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的(其实是巧合,多运行几次,会产生不同的输出结果),为什么会产生这样的结果呢,因为建立的Count对象是线程 ...
- Java线程同步(synchronized)——卖票问题
卖票问题通常被用来举例说明线程同步问题,在Java中,采用关键字synchronized关键字来解决线程同步的问题. Java任意类型的对象都有一个标志位,该标志位具有0,1两种状态,其开始状态为1, ...
- 线程同步 synchronized 同步代码块 同步方法 同步锁
一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...
- Java多线程:线程同步与关键字synchronized
一.同步的特性1. 不必同步类中所有的方法, 类可以同时拥有同步和非同步方法.2. 如果线程拥有同步和非同步方法, 则非同步方法可以被多个线程自由访问而不受锁的限制. 参见实验1:http://blo ...
- 剑指Offer——线程同步volatile与synchronized详解
(转)Java面试--线程同步volatile与synchronized详解 0. 前言 面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现 ...
随机推荐
- django中使用第三方包实现定时任务
# 转载请留言联系 在做主页静态化的时候,需要定时生成主页HTML,以保持数据的最新. 定时任务可以用第三方包django-crontab来实现. 附上官方文档:https://pypi.org/pr ...
- experss 做小型服务器出现跨域问题
情况是这样的 我用express做一个小型的服务器来做我demo项目的一个接口 然后我就出现了跨域问题 然后我就 app.all('/*', function(req, res, next) { // ...
- hdu 1505(最大子矩阵)
City Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- ubuntu16.04安装最新版本的wine
1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安装wine sudo apt-get install ...
- ZSTU OJ 4273 玩具
枚举,二分,$RMQ$. 肯定是将连续一段中最大值免去花费,枚举起点之后,二分终点即可.可以证明单调性. #include<map> #include<set> #includ ...
- Sqli-labs less 3
Less-3 我们使用?id=' 注入代码后,我们得到像这样的一个错误: MySQL server version for the right syntax to use near "&qu ...
- Linux命令之passwd、chpasswd
(1).命令passed passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inacti ...
- Maven环境配置及idea建Maven工程
https://blog.csdn.net/qq_37497322/article/details/78988378
- 【状压dp】Most Powerful
[ZOJ3471]Most Powerful Time Limit: 2 Seconds Memory Limit: 65536 KB Recently, researchers on Ma ...
- BZOJ 4059 [Cerc2012]Non-boring sequences(启发式分治)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4059 [题目大意] 一个序列被称为是不无聊的,仅当它的每个连续子序列存在一个独一无二的 ...