多个线程操作同一个方法或变量时常常出现错误,要保证每个线程都正常运行就要通过加锁,每次只有一个能够拿到锁通过.如下: package cn.sp.thread; /** * Created by 2YSP on 2017/10/19. */ public class TraditionalThreadSynchronized { public static void main(String[] args) { new TraditionalThreadSynchronized().init();…
在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊.售票系统啊等.为了避免这些问题的出现,我们可以使用synchronized关键字来解决,下面针对synchronized常见的用法做一个总结.首先写一个存在并发问题的程序,如下: public class TraditionalThreadSynchronized { public static void main(String[] args) { //在静态方法中不能new内部类的实例对象 //private Outputer…
synchronized使用之基本原则: synchronized可以锁方法,也可以锁代码片段,但要实现互斥的基本就是在想要互斥的代码上加”同一把锁“,也就是同一个对象,也就是用==判断等于true的对象 下面看一个例子: Work.java 真正做事情的类 package com.yzl; public class Work { /** * 未同步的 * @param name */ public void noSynwrite(String name){ for(int i=0; i<…
为什么要用锁? 在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的.注意这里 局部变量是不存在脏读的情况 实例: 定义一个类,通过不同的传入返回不同的结果 SynchronizedLock.java /** * 使用synchronized关键字加锁 * */ public class SynchronizedLock { private int num = 0…
/** * * 线程互斥,采用synchronized关键字可以实现线程与线程之间的互斥,要注意的是在synchronized上的对象要是同一个,才可以 * 保证在同一时刻,只有一个线程可以执行synchronized代码块,即串行化执行 * */ public class SynchronizedTest { public static void main(String[] args) { new SynchronizedTest().print(); } public void print(…