- 博客(8)
- 资源 (70)
- 收藏
- 关注
原创 Java从零开始学多线程——Java 锁 Lock AbstractQueuedSynchronizer ReentrantLock acquireQueued NonfairSync tryA
????锁的分类 自旋锁: 线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。jvm实现,使线程在没获得锁的时候,不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起 意思就是,当别的线程拿到锁进入方法执行的时候,别的锁进不来,但是他不能被挂起,开始执行空的for循环防止被挂起,如果循环完毕还没有得到锁,那么就会被挂起。 //自旋锁 public class Lock{ private boolean isLocked = false;
2020-12-31 17:23:08 178
原创 Java从零开始学多线程——6.Java 锁 Lock AbstractQueuedSynchronizer ReentrantLock acquireQueued NonfairSync tryA
????锁的分类 自旋锁: 线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁上下文切换不值得。jvm实现,使线程在没获得锁的时候,不被挂起,转而执行空循环,循环几次之后,如果还没能获得锁,则被挂起 意思就是,当别的线程拿到锁进入方法执行的时候,别的锁进不来,但是他不能被挂起,开始执行空的for循环防止被挂起,如果循环完毕还没有得到锁,那么就会被挂起。 //自旋锁 public class Lock{ private boolean isLocked = false;
2020-12-30 20:08:17 200
原创 Java从零开始学多线程——5.线程安全性 volatile synchronized
什么是线程安全? 当多个线程访问某个类,不管运行时环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类为线程安全的。----《并发编程实战》 什么是线程不安全? 多线程并发访问时,得不到正确的结果。 从字节码角度剖析线程不安全操作 javac -encoding UTF-8 ****.java 编译成 ****.class javap -c ****.class 进行反编译,得到相应的字节码指令 import java.util
2020-12-29 21:04:30 106
原创 Java从零开始学Redis——1.剖析Redis和memcached和mysql之间的区别
先来复习一下什么是ACID? 一、原子性(atomicity) 一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性 二、一致性(consistency) 事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。 如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态 三、隔离性(isolation).
2020-12-28 21:46:38 102
原创 Java从零开始学多线程——4.线程的优先级
线程的优先级告诉程序该线程的重要程度有多大。如果有大量线程都被堵塞,都在等候运行,程序会尽可能地先运行优先级的那个线程。 但是,这并不表示优先级较低的线程不会运行。若线程的优先级较低,只不过表示它被准许运行的机会小一些而已。 线程的优先级设置可以为1-10的任一数值 Thread类中定义了三个线程优先级,分别是: MIN_PRIORITY(1)、NORM_PRIORITY(5)、MAX_PRIORITY(10) 一般情况下推荐使用这几个常量,不要自行设置数值。 不同平台,对线程的优先级的支持不同。 编程的时
2020-12-28 15:03:06 152
原创 Java从零开始学多线程——3.线程的挂起、恢复和中断 stop notify suspend resume
什么是挂起线程? 线程的挂起操作实质上就是使线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行。 在线程挂起后,可以通过重新唤醒线程来使之恢复运行 为什么要挂起线程? cpu分配的时间片非常短、同时也非常珍贵。避免资源的浪费。 如何挂起线程? /** * 挂起操作 * */ public class SuspendDemo implements Runnable { @Override public void run() {
2020-12-28 14:46:26 175
原创 Java从零开始学多线程——2.如何创建线程,start()和run()的区别是什么
1.继承Thread,并重写父类的run方法 public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { MyThread myThread = new MyThread(
2020-12-28 10:09:36 93
原创 Java从零开始学多线程——1.Java线程的几种状态
线程的状态: 1.初始状态 NEW 线程刚被new出来,没有调用start()方法 2.运行状态 Runnable 处于可运行状态,在jvm里执行,可能在等待来自操作系统的其他资源 //Runnable状态 Thread thread = new Thread(()->{ try { System.in.read(); } catch (IOException e) { e.printStackTrace();
2020-12-27 23:18:16 119
BAT——Java工程师面试题及其答案分析详解
2021-01-27
python数据分析pandas数据源
2022-10-09
Java毕业设计参考——毕业设计管理系统,技术栈SpringMVC\SSM\JSP\Mysql
2022-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人