进程多线程
文章平均质量分 77
进程多线程有关知识
shadow___h
这个作者很懒,什么都没留下…
展开
-
ThreadLocal
文章目录ThreadLocalThreadLcoal的使用引入ThreadLocal的原因(与synchronized的区别)ThreadLocal的内部结构ThreadLocalMap源码分析ThreadLocal源码分分析属性构造方法和简单方法Set方法Get方法Remove方法ThreadLoaclMap和内存泄露ThreadLocalThreadLcoal的使用线程并发 : 在多线程并发的场景下传递数据 :我们可以通过ThreadLocal在同一线程中,不同组件中传递公共变量线程隔离 :原创 2021-05-14 20:55:41 · 488 阅读 · 1 评论 -
多线程使用的三个工具类:CountDownLatch,CyclicBarrier,Semaphore
文章目录多线程使用的三个工具类:CountDownLatch,CyclicBarrier,SemaphoreCountDownLatchCyclicBarrierSemaphore多线程使用的三个工具类:CountDownLatch,CyclicBarrier,SemaphoreCountDownLatch减法计数器构造方法 public CountDownLatch(int count) { if (count < 0) throw new IllegalAr原创 2021-04-20 12:43:34 · 377 阅读 · 0 评论 -
ArrayList在多并发下的不安全问题以及解决方法
文章目录ArrayList在多并发下的不安全问题以及解决方法**为啥不安全**1. 使用Vector()数组来解决这个问题2. 使用Connections集合3. 使用 CopyOnWriteArrayListArrayList在多并发下的不安全问题以及解决方法为啥不安全多线程并发插入元素和读取元素的时候会出现 ConcurrentModificationException public static void main(String[] args) { ArrayL原创 2021-04-19 21:42:38 · 691 阅读 · 0 评论 -
创建线程的四种方式
文章目录创建线程的四种方法1. 继承Thread类创建线程2. 实现Runnable接口创建线程3.实现Callable接口创建线程4.使用线程池创建线程1.对比new Thread,创建线程都比较耗时,使用线程池可以达到线程复用的目的。2. 创建线程池的方式:3. 通过线程池创建任务创建线程的四种方法1. 继承Thread类创建线程static class MyThread extends Thread { @Override public void run() {原创 2021-03-27 17:49:53 · 103 阅读 · 0 评论 -
Synchronized关键字
Synchronized关键字synchronized是一种悲观锁乐观锁和悲观锁乐观锁设计思想 : 通一个时间点,经常只有一个线程对一个共享变量进行操作(可以理解为没有人和你抢吃的,你可以光明正大的吃)原理:线程直接操作共享变量实现 :基于CAS来实现悲观锁设计思想:同一个时间点,经常会有多个线程对一个共享变量进行操作(可以理解为有人和你抢吃的,需要偷偷藏起来吃,自己吃够了,把吃的才会拿出来)原理:线程操作变量的时候需要先加锁,再对变量进行操作实现:加锁操作CAS原创 2021-03-18 19:44:36 · 103 阅读 · 0 评论 -
线程和进程的区别
文章目录进程和线程的区别线程的优点创建一个线程中使用start() 和 run() 两种方法的区别多线程多线程在什么场景下使用,以及多线程的优点和特性。什么因素会影响多线程的效率常用API进程和线程的区别进程 : 系统分配资源的最小单位线程 :系统的调度的最小单位 ;每一个进程至少含有一个线程,即主线程(系统级别的,c语言的主线程),但是java级别的主线程即main方法;进程有自己的内存空间地址,而线程只独享指令流执行的必要资源,比如寄存器和栈由于同一进程的各线程间共享内存和资源文件,可以不通原创 2021-01-02 18:16:06 · 194 阅读 · 0 评论 -
多线程之 wait() 和 notifyAll() 方法
文章目录多线程之 wait() 和 notifyAll() 方法wait()notifyAll()方法使用wait()和notifytAll()方法来解决生产者消费者问题wait() 和 sleep()的区别多线程之 wait() 和 notifyAll() 方法wait()wait的方法是让当前线程进入等待状态,并且让当前线程释放对象锁。wait() 方法必须在同步代码块中使用,当我们调用wait而没有适当的锁的时候就会抛出 IllegalMonitorStateException异常。原创 2021-01-02 18:14:06 · 270 阅读 · 1 评论 -
线程不安全之volatile关键字
文章目录线程不安全之volatile关键字可见性有序性分析一下单例模式线程不安全之volatile关键字上篇博文讲了线程不安全问题https://editor.csdn.net/md/?articleId=111461834可见性就是说, 在多线程的环境下,某个共享变量A被其中一个线程修改了,其他线程就会知道有一个线程修改了这个共享变量A,然后其他线程若是要使用这个共享变量,就会直接去内存中去读取整个共享变量,而不是从自己的空间中去读取这个变量A。(线程自己的内存区域中存储着这个变量A的缓存地址原创 2020-12-30 23:53:12 · 295 阅读 · 1 评论 -
关于java线程不安全问题的简述
关于java线程不安全问题的简述什么是线程不安全及其具体解析当我们执行一个Java.exe进程的时候,首先会初始化JVM参数,然后创建JVM虚拟机,再启动后台线程,最后执行就是执行我们代码行的main方法。而在JVM运行的时候会将他管理的内存分为若干个区域,每一个线程都有其独有的程序计数器,java虚拟机栈和本地方法栈,以及线程共享的Java堆和方法区(包含运行时常量池)当我们定义一个静态变量COUNT,它在被编译的时候创建于方法区。当我们创建多个线程去给COUNT执行++的操作的时候,原创 2020-12-20 20:09:18 · 175 阅读 · 0 评论 -
Java中线程的状态以及状态的转化,线程中对于线程中断方法API的应用
Java中线程的状态以及状态的转化NEW 创建线程TIMED_WAITING 线程无限等待或者超时等待WATING 线程等待RUNNABLE 线程处于运行态(RUNNING)或者就绪态(READY)TERMINATED 终止BLOCKED 锁 线程阻塞[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8KcOfncP-1608174164451)(C:\Users\所谓爱隔山海\Desktop\QQ截图20201217095019.png)]线程中对于线程中原创 2020-12-17 11:03:01 · 91 阅读 · 0 评论 -
序列化和反序列化
我们打个比方,你要给你你朋友发消息“今晚通宵写代码”,但是电脑是不可能的就这样发过去的,电脑会将这段话变作他认识的一种二进制编码,在通过网络发过去,而你朋友的通讯设备收到这个消息流的时候,最初也是这个设备所认识的二进制编码,再通过反序列化进行识别得到这个消息。序列化就是把一个结构化数据(对象)变成一个二进制的bit流;反序列化就是把二进制的bit流还原成原来的对象序列化和反序列化最大的目的就是为了让对象通过网络传输/能够在文件中保存。序列化和反序列化的过程中要保证“信息不丢失”,如果丢失了,..原创 2020-06-21 00:58:14 · 127 阅读 · 0 评论 -
IO中拷贝一个简单文件
import java.io.*;public class Test2 { public static void main(String[] args) throws IOException { copyFile("c:/Test1/xxx.jpg", "c:/Test1/yyy.jpg"); } private static void copyFile(String srcPath, String destPath) throws IOException {原创 2020-06-21 00:23:55 · 126 阅读 · 0 评论 -
简单的计时器代码
package 定时器;import java.util.concurrent.PriorityBlockingQueue;public class Test2 { static class Task implements Comparable<Task>{ private Runnable command; private long time; public Task(Runnable command, long after)原创 2020-06-13 23:27:38 · 1119 阅读 · 0 评论 -
阻塞队列
我们用循环队列的方法,然后在对应的方法上加上一定的限制方法构建出一个阻塞队列package 阻塞队列;public class Test2 { static class BlockingQueue { private int[] array = new int[100]; private volatile int head = 0; private volatile int tail = 0; private volat原创 2020-06-13 22:17:44 · 93 阅读 · 0 评论 -
线程(7),单例模式(饿汉模式,懒汉模式)
在代码中有些概念,不应该存在多个实例,我们此时就应该用单列模式来解决我们通过单列模式来解决的有些问题,保证指定的类只有一个实例(如果尝试创建多个实例,直接编译就会报错)单例模式中有两种典型的实现方式1.饿汉模式public class Test14_Singleton2 { //懒汉模式 static class Singleton { //设为private 在内外部就无法new在这个类了 private Singleton() {} .原创 2020-06-12 13:06:10 · 86 阅读 · 0 评论 -
线程(6),volatile关键字,对象等待集
1.volatile作用:保持内存的可见性例如import java.util.Scanner;public class Test11 { static class Cou { private int flag = 0; } public static void main(String[] args) { Cou c = new Cou(); Thread t1 = new Thread() {原创 2020-06-12 12:00:31 · 102 阅读 · 0 评论 -
线程(5)线程安全
线程安全:就是在多线程并发执行某个代码的时候,没有产生逻辑上的错误线程不安全:就是在多线程并发执行某个代码时,产生了逻辑上的错误。线程不安全的原因线程是抢占式执行的,线程之间的调度完全是由内核负责的,用户代码感知不到,也无法控制,线程之间谁先执行,谁后执行,谁执行到哪里从cpu上下来,这样的过程我们是无法感知到的线程的操作不是原子的,每次的操作会分为三个操作(把内存的数据读取到cpu中,在cpu中操作数据,把计算结束的数据写回到内存中),当cpu执行到上面三个操作中的任何一步的时候,都可能会被调原创 2020-06-10 18:27:59 · 88 阅读 · 0 评论 -
线程(4),等待,休眠,状态
线程等待线程之间是并发执行的关系多个线程之间,谁先执行,谁后执行,谁执行到那里让cpu运行,我们是无法是控制的,只能让系统的内核去控制但是我们可以控制用jion方法来让那个线程去先结束jion方法,执行jion方法线程就会阻塞,一直到等到对应线程的jion方法执行完才会执行,join方法存在的意义就是为了控制线程结束得先后顺序2.线程休眠就是让正在的运行的线程去休息一会,等段时间在执行sleep就是让对应线程的PCB从就绪队列进入到阻塞队列线程状态NEW Thre.原创 2020-06-08 23:25:35 · 365 阅读 · 0 评论 -
线程(3),线程中断
当我们想结束一个正在运行的线程的时候,也就是说中断让一个线程结束,结束的情况可能有两种情况让线程执行完当前的任务后在去结束public class Test3 { //这种结束方法比较温和,当标记位被标记后结束当前任务,才会结束 private static boolean B = false; public static void main(String[] args) throws InterruptedException { Thread t = ne原创 2020-06-08 22:56:15 · 90 阅读 · 0 评论 -
线程(2),线程的几种状态
public class Test2 { public static void main(String[] args) { Thread t1 = new Thread("线程1") { @Override public void run() { for (int i = 0; i < 10; i++) { // System.out.println(Thre原创 2020-06-08 22:17:16 · 117 阅读 · 0 评论