多线程之synchronized(this)
来源:互联网 发布:js ajax获取网页 编辑:程序博客网 时间:2024/05/20 03:47
使用情景:我们有时候会使用多线程但是我们需要在调用某一个实例的时候,我们需要有序,比如,卖火车票的时候,我们要先判断是否有票,然后再出售票,当多个窗口卖火车票的时候,票池就会出错。会出现一张票被多个售票窗口重复出售。
使用方法:我们可以使用synchronized(this)来给票池枷锁,保证买票的时候,只能有一个售票员控制一张票。
实验代码:
package thread;public class SynchronizedCode implements Runnable { private int aa; public SynchronizedCode(int aa) { this.aa = aa; } public void run() { synchronized (this) { try { System.out.println("这是第一个" + aa); Thread.sleep(aa); System.out.println("-------" + aa); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { SynchronizedCode sc1 = new SynchronizedCode(2000); SynchronizedCode sc2 = new SynchronizedCode(1000); Thread thread1 = new Thread(sc1); Thread thread2 = new Thread(sc2); thread1.start(); thread2.start(); }}
实验结果:
这是第一个2000这是第一个1000-------1000-------2000
上面是因为我们使用了不同对象所以出现这样的实验结果。
当我们使用同一个对象的时候,实验代码如下:
package thread;public class SynchronizedCode implements Runnable { private int aa; public SynchronizedCode(int aa) { this.aa = aa; } public void run() { synchronized (this) { try { System.out.println("这是第一个" + aa); Thread.sleep(aa); System.out.println("-------" + aa); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { SynchronizedCode sc1 = new SynchronizedCode(2000);// SynchronizedCode sc2 = new SynchronizedCode(1000); Thread thread1 = new Thread(sc1); Thread thread2 = new Thread(sc1); thread1.start(); thread2.start(); }}
实验结果如下:
这是第一个2000-------2000这是第一个2000-------2000
当我们不使用synchronized的时候,实验代码如下:
package thread;public class SynchronizedCode implements Runnable { private int aa; public SynchronizedCode(int aa) { this.aa = aa; } public void run() {// synchronized (this) { try { System.out.println("这是第一个" + aa); Thread.sleep(aa); System.out.println("-------" + aa); } catch (Exception e) { e.printStackTrace(); }// } } public static void main(String[] args) { SynchronizedCode sc1 = new SynchronizedCode(2000);// SynchronizedCode sc2 = new SynchronizedCode(1000); Thread thread1 = new Thread(sc1); Thread thread2 = new Thread(sc1); thread1.start(); thread2.start(); }}
实验结果如下:
这是第一个2000这是第一个2000-------2000-------2000
通过对比我们就可以清楚的知道synchronized(this)的作用。
0 0
- 多线程之synchronized(this)
- 多线程之synchronized(this)锁定当前对象
- 多线程 synchronized(this)与 synchronized(非this)同步代码块的区别
- Java 多线程 (PART XI)synchronized(IV)关于synchronized(非this对象X)
- 多线程之互斥锁(synchronized关键字)
- Java多线程之synchronized
- Java多线程之synchronized
- 多线程之同步Synchronized
- java多线程之synchronized
- 多线程之synchronized
- 多线程之synchronized+方法
- java多线程之synchronized
- Java多线程之synchronized
- synchronized(this)
- JAVA之旅(十三)——线程的安全性,synchronized关键字,多线程同步代码块,同步函数,同步函数的锁是this
- Java多线程总结之 synchronized
- javaSE 多线程之同步synchronized
- Java多线程之~~~~synchronized 方法
- 安卓安全实践
- 录音文件的导出
- JSP 用户提交请求
- vaadin插件安装方法eclipse
- LoadLayout快速实现加载中界面,加载错误界面,空界面等功能
- 多线程之synchronized(this)
- 并查集(DSU)
- [Lintcode]Maximum Product Subarray乘积最大子序列
- 音频(四) - 音频压缩(Speex使用&Opus简介)
- DataGridView第一行加序号
- AngularJS2.0 入门教程
- Leetcode 401 Binary Watch
- android在onCreate()方法中获取View的宽度与高度的方法实战
- 容易混淆的器件——硬件