重新认识synchronized(上)】的更多相关文章

上篇<并发和多线程-说说面试常考平时少用的volatile>主要介绍的是volatile的可见性.原子性等特性,同时也通过一些实例简单与synchronized做了对比. 相比较volatile,其实我们应该更加熟悉synchronized,平时开发中接触和使用也更多一些. 那么为什么说synchronized是八面玲珑呢,因为它可以混迹在很多"场所"(方法.代码块),与各种角色(类.对象)打交道. 也正是因为它的八面玲珑,所以就显得比较神秘,也比较复杂,今天就来追踪下sy…
 重入锁可以完全代替synchronized关键字.在JDK5.0的早期版本中,重入锁的性能远远好于synchronized,但是从JDK6.0开始.JDK在synchronized上做了大量的优化.使得两者的性能差距不大, public class ReenterLock implements Runnable { public static ReentrantLock lock = new ReentrantLock(); public static int i = 0; /** * Whe…
/** * * 线程互斥,采用synchronized关键字可以实现线程与线程之间的互斥,要注意的是在synchronized上的对象要是同一个,才可以 * 保证在同一时刻,只有一个线程可以执行synchronized代码块,即串行化执行 * */ public class SynchronizedTest { public static void main(String[] args) { new SynchronizedTest().print(); } public void print(…
一.前言 本文要介绍使用Java5中 Lock 对象,同样也能实现同步的效果,而且在使用上更加方便.灵活,主要包括 ReentrantLock 类的使用和ReentrantReadWriteLock 类的使用. 二.使用ReentrantLock 类 1.在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增加的ReentrantLock也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定.多路分支通知等功能,而且在使用上也比sync…
什么叫线程安全?举例说明 多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的. 比如无状态对象一定是线程安全的. 进程和线程的区别 调度: 线程是调度的基本单位,进程是拥有资源的基本单位.同一进程的中线程的切换不会引起进程的切换,不同进程中进行线程切换会引起进程的切换. 拥有资源:进程是拥有资源的基本单位,线程除了自身的栈外一般不拥有资源.而是和其他线程共享同一进程中…
创建线程的方式及实现 一.继承Thread类创建线程类 1.定义Thread的子类,并重写run方法,因为该方法的方法体就是代表了线程要完成的任务,因此run方法又叫做执行体. 2.创建Thread子类的实例,即创建了线程对象. 3.调用线程对象的start方法来启动该线程. 二.通过Runnable接口来创建线程类 1.定义Runnable接口的实现类,并重写run方法,跟Thread一样,该run方法又叫做执行体. 2.创建实现类的实例,并依此实例作为Thread的target来创建Thre…
一.synchronized的功能扩展:重入锁(java.util.concurrent.locks.ReentrantLock) 重入锁可以完全替代synchronized关键字.在JDK 5.0的早期版本中,重入锁的性能远远好于synchronized,但从JDK 6.0开始,JDK在syn-chronized上做了大量的优化,使得两者的性能差距并不大. 01 public class ReenterLock implements Runnable{ 02 public static Ree…
<Java并发编程的艺术>这本书特别好,和<深入了解JAVA虚拟机>有一拼,建议做java的都看看,下面全部都是复制书中的部分内容,主要目的是做个笔记,方便以后遇到问题能找到. 在Java中,所有实例域.静态域和数组元素都存储在堆内存中,堆内存在线程之间共享.局部变量(Local Variables),方法定义参数(Java语言规范称之为Formal Method Parameters)和异常处理器参数(ExceptionHandler Parameters)不会在线程之间共享,它…
package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 1.0 * @创建时间:2020年7月31日 下午2:28:24 * @类说明: 綫程的生命周期:從創建到消亡.新建狀態:new * Thread();就緒狀態:start();阻塞狀態:sleep(),wait();運行狀態:run(); * 消亡:執行完run方法的語句就自然消亡了,再次使用須再次創建 * 綫程的優先級:不同優先級:高優先級先…
第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种:无锁并发编程.CAS算法.使用最少线程.使用协程. 无锁并发编程:不同线程处理不同分片的数据,如数据哈希取模分片等. CAS算法:java的Atomic包使用cas算法更新数据,不需要加锁. 使用最少线程:任务少时避免创建不需要的线程,否则大量线程会等待状态. 使用协程:在单线程里实现多任务的调度.   1.2 死锁 避免死锁的几个常用方法…