摘要: 同步方法里面可以调用非同步方法 public class T1 { // 示例演示同步方法和非同步方法同时调用 synchronized void m() { System.out.println("synchronized method" + new Date()); n(); } void n( 阅读全文
posted @ 2021-06-30 22:15 XIN1024 阅读(128) 评论(0) 推荐(0)
摘要: 接上篇,本篇演示锁加在类上面 public class T { private static Integer count = 0; public static void m() { //任何线程要执行下面的代码,必须先拿到当前对象的锁 //锁的是当前对象 synchronized (T.class) 阅读全文
posted @ 2021-06-30 22:14 XIN1024 阅读(102) 评论(0) 推荐(0)
摘要: 目的 本文只针对synchronized的使用进行描述以及代码演示。具体原理不做深入探讨 简介 synchronized 在多线程并发环境下,通过加锁的形式保证了数据的一致性,锁存在Java对象头里。如果对象是数组类型,则虚拟机用3个Word(字宽)存储对象头,如果对象是非数组类型,则用2字宽存储对 阅读全文
posted @ 2021-06-30 22:13 XIN1024 阅读(236) 评论(0) 推荐(0)
摘要: 指令重排 内存可见性只是 volatile 的其中一个语义,它还可以防止 JVM 进行指令重排优化。 举一个伪代码: int a=10 ;//1 int b=20 ;//2 int c= a+b ;//3 一段特别简单的代码,理想情况下它的执行顺序是: 1>2>3。但有可能经过 JVM 优化之后的执 阅读全文
posted @ 2021-06-30 22:12 XIN1024 阅读(321) 评论(0) 推荐(0)
摘要: 上一章节我们讲了 volatile的可见性的,以及可见性的演示,这里就会给大家产生一个误区,这样的使用方式很容易给人的感觉是 对volatile修饰的变量进行并发操作是线程安全的。 其实不然,用volatile修饰的变量只有两个特性就是 可见性、禁止指令重排序。并不能保证线程的安全性 我们通过以下代 阅读全文
posted @ 2021-06-30 22:11 XIN1024 阅读(86) 评论(0) 推荐(0)
摘要: 线程共包括以下 5 种状态: 1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。 2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。 阅读全文
posted @ 2021-06-30 22:04 XIN1024 阅读(388) 评论(0) 推荐(0)
摘要: 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是****轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronize 阅读全文
posted @ 2021-06-30 21:33 XIN1024 阅读(298) 评论(0) 推荐(0)
摘要: SLEEP sleep 意思是睡眠,当前线程暂停一段时间让给别的线程去运行。sleep是怎么复活的?由你的睡眠时间而定,等睡眠到规定的时间自动复活,CPU 没有线程的概念,会不断的从内存中获取指令去执行,睡眠的意思就是当前线程让出cpu 由其他线程去执行。 static void testSleep 阅读全文
posted @ 2021-06-30 21:31 XIN1024 阅读(48) 评论(0) 推荐(0)
摘要: 通过实现Runnable接口来实现 public class T01_CreateThread { // 创建线程的三种方式 public static void main(String[] args) { // 通过实现Runnable接口来创建Thread线程 // 1、写一个类实现Runnab 阅读全文
posted @ 2021-06-30 21:29 XIN1024 阅读(145) 评论(0) 推荐(0)