- 博客(14)
- 收藏
- 关注
原创 java线程池
java线程池线程在计算机中属于稀缺资源。频繁的创建线程,销毁线程会比较耗费计算机的资源。所以基本上会创建一个线程池去管理一批线程。达到线程复用的效果。jdk为我们提供了线程池 : ThreadPoolExecutor线程池的构造方法corePoolSize : 线程池的核心线程数maximumPoolSize : 线程池最大线程数keepAliveTime : 保持活跃的时间u...
2020-04-17 10:28:42
136
原创 AQS
队列同步器 AbstractQueuedSynchronizer用来构建锁或者其他同步组件的基础框架,它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成资源获取线程的排队工作。AQS 使用方式和其中的设计模式AQS 的主要使用方式是继承,子类通过继承 AQS 并实现它的抽象方法来管 理同步状态,在 AQS 里由一个 int 型的 state 来代表这个状态,在抽象方...
2020-04-06 23:09:42
106
原创 显示锁
LockLock比传统线程模型中的synchronized方式更加面向对象。说白了Lock就是个对象,两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。lock提供的方法相比于synchronized来说更加的灵活了,提供了尝试获取锁,超时获取锁等方法。lock() : 获取锁,调用该方法的线程会获得锁,lockInterruptibly():可中断获取锁。t...
2020-04-06 15:09:17
88
原创 CAS原子操作
原子操作什么是原子操作,打个比方,假如有两个操作A和B,当执行A的线程去看另一个执行B的线程的时候,要么B线程还没执行,要么B线程执行完了。那么A跟B之间就是原子的。如何实现原子操作实现原子操作的方式,当然有加锁,比如synchronized加锁机制可以很好的保证原子操作,但是过于笨重。例如,当一个线程占有锁的时候,其他的线程就必须等这个线程把锁释放了才能运行。 那如果 被阻塞的线程是优先...
2020-04-05 23:40:17
198
原创 ThreadLocal
ThreadlocalThreadlocal 是jdk提供的一个除了加锁外的另外一种线程并发安全的东西。Threadlocal 和 Synchonized的比较这两者都是解决线程并发安全的问题。Synchonized是通过上锁的方式,使某个变量或者某个方法,在某一个时刻只能被一个线程访问到。Threadlocal 是通过为每个线程都提供了变量的副本,使每个线程在某一个时刻访问到的,并非...
2020-04-03 14:01:29
66
原创 volatile关键字
最轻量的同步机制volatile关键字, 能够保证不同线程对这个关键字修饰的变量进行操作时的可见性,意思就是一个线程修改了某个被volatile修饰的变量的值,这新值对其他线程来说是立即可见的。但是 volatile 不能保证数据在多个线程下同时写时的线程安全。volatile 的适用场景在于 一条线程写,多条线程读。...
2020-04-02 22:19:46
75
原创 Exchanger 和 Semaphore
java多线程工具类从JDK 1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程的开发。ExchangerExchanger(交换机)可以实现两个线程在运行中,实现交换对象的效果,例如 A 线程和 B线程,在运行中,交换了信息,然后继续运行。先到达的线程会阻塞等待后来的线程,直到两个线程都到达交换机后,互换对象,再各自执行。感觉有点像谍战片,两个特务在互...
2020-03-30 23:29:03
117
原创 CountDownLatch 和 CyclicBarrier
java多线程工具类从JDK 1.5开始,增加了java.util.concurrent包,它的引入大大简化了多线程的开发。CountDownLatch这个类可以实现某个线程阻塞,直到其他若干个线程完成任务后,才继续执行的效果。简单来说这是个计数器,当计数器减到0之后,释放阻塞的线程。例如一个煮饭的例子public class CountDownLatch_Demo { publ...
2020-03-29 20:06:16
93
原创 join(),wait() , notify() , notifyAll()
多线程中运行时没有办法确定线程的运行顺序,因为都是由cpu去执行哪条线程工作的,那么,如何能够使多条线程协调一起工作呢join()能够让某个线程等待另一个线程执行完之后再执行。简单来说,就是线程A执行了线程B的join方法,那么线程A就要等待B线程执行完以后,A才能继续执行public class JoinDemo { static Integer SCORE = 0 ; ...
2020-03-29 14:20:37
109
原创 java中的线程安全和非线程安全
线程安全与非安全线程安全是指,如果代码中有多个线程同时运行,如果每一次运行的结果都是一样,或者每一次运行的结果都是跟预期一样的,或者说跟单线程运行的结果一样。那么就是线程安全。非线程安全是指多个线程同时运行的时候,出现不确定的结果。在运行的过程中可能产生脏数据。就是线程不安全。线程安全产生的原因其实就是两个或多个线程同时运行的时候,共享了某个数据。在多个线程同时操作该数据的情况下,该数据没...
2020-03-26 23:01:19
205
原创 java中的Synchronized
为什么要使用Synchronized关键字在并发的过程中,存在着多个线程共享数据或者数据集的时候,Synchronized可以保证在同一时刻,只有一条线程可以访问某个方法或者某个代码块。Synchronized加锁的方式对象锁锁的是类的实例对象。类锁锁的是每个类的class对象。每个类的class对象在虚拟机中只有一个,所以类锁也只有一个。关键字可修饰的地方代码块...
2020-03-24 22:18:25
76
原创 java线程的启动和中止
线程的启动和中断方式X extends Thread;,然后 X.startX implements Runnable;然后交给 Thread 运行两种方式都是把业务逻辑写在run()方法里,调用start()方法启动。创建线程的时候,通过new Thread() 其实只是new了一个Thread的实例,还没有跟操作系统的线程挂起钩来。只有执行了start()方法,才算是启动了真正意义...
2020-03-23 10:38:30
173
原创 java中的创建线程方式
线程是什么进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘 IO 等。同一进程中的多条线程共享该进程中的全部系统资源。而一个进程就是由一个或者多个线程组成的。线程就是 CPU 调度的最小单位。多线程就是让同一个处理器上的多个线程同步执行并共享处理器的执行资源。其实就是共享了cpu的调度时间,所谓的CPU 时间片轮转机制。让cpu并发执行多个线程。澄清并行和并发...
2020-03-23 00:25:19
70
原创 windows命令行安装MySql5.6.46
下载mysql的zip包官网地址 https://dev.mysql.com/downloads/mysql/ 点击 archive可以找到历史版本mysql安装解压zip包后编辑mysql的配置文件 my.ini,如果没有该文件手动创建一个[mysqld]#mysql安装目录basedir = D:\java\mysql-5.6.46-winx64#mysql数据目录datadi...
2020-03-20 15:22:15
640
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人