
JavaSE线程
文章平均质量分 53
从零开始的java小白
这个作者很懒,什么都没留下…
展开
-
死锁与线程等待和唤醒
1.死锁:1.有多把锁2.有多个线程3.有同步代码块嵌套在我们多线程程序中,使用了多把锁,造成线程之间互相等待,程序不往下走了【注意:应该尽量避免死锁】 4.死锁案列public class Tests { public static void main(String[] args) { // 线程1: 锁A、锁B 执行线程 new Thread(new Runna...原创 2021-08-27 21:45:41 · 407 阅读 · 0 评论 -
Java之线程池
1.线程池的概念线程池的思想:当我们使用线程的时候,就去线程池里获取一个线程来使用,使用完成之后不会销毁,而是可以继续去执行其他的任务我们之前都是在需要线程的时候去创建一个线程,这样使用非常方便,但是如果并发的线程数量很多的话,每个线程都可能就执行很短的时间就结束了,那么,这样频繁的创建线程就会大大的降低系统的效率,因为频繁创建和销毁线程需要时间所以我们需要【线程池】其实就是一个容纳很多个线程的容器,其中的线程可以反复使用,省去了频繁...原创 2021-08-26 22:48:32 · 122 阅读 · 1 评论 -
Exchanger的使用
Exchanger java.util.concurrent.Exchanger<V> 概述:用于线程间的数据转换 API: 构造方法: public Exchanger() 成员方法: V exchange(V x):传递参数,参数就是你要传递的数据,返回值就是其他线程传递给你的数据演示: 线程1:把【数据1】传递给线程2 线程2:把【数...原创 2021-08-26 22:42:08 · 196 阅读 · 0 评论 -
Semaphore(获取许可)
Semaphore - java.util.concurrent.Semaphore的主要作用时控制线程的并发数量 API: 构造方法: public Semaphore(int permits): permits 表示许可线程的数量 成员方法: public void acquire():表示获取许可 public void release():表示释放许可演示:超市开业,每次只能允许五名...原创 2021-08-26 22:40:17 · 142 阅读 · 0 评论 -
CyclicBarrier(屏障)
java.util.concurrent.CyclicBarrier 概述:CyclicBarrier的字面意思是可循环使用(cyclic)的屏障(barrier) 它要做的事情,是让一组线程到达一个屏障(也叫做同步点)时被阻塞, 直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续执行API: 构造方法: public CyclicBarrier(int parties , Runnable barrierAction)...原创 2021-08-26 22:37:48 · 199 阅读 · 0 评论 -
CountDownLatch 并发工具类
java.util.concurrent.CountDownLatch 允许一个或多个线程等待其他线程完成操作它的API: 构造方法: public CountDownLatch(int count) 初始化一个指定计数器的CountDownLatch对象 成员方法: - public void await() 让当前线程等待(当计数器的数值为0,那么等待结束) - pulic void countDown() 计数器进行 减 1 操作例如:线程1要执...原创 2021-08-26 22:34:55 · 96 阅读 · 0 评论 -
CopyOnWriteArrayList、Set与ConcurrenHashMap
1.CopyOnWriteArrayList演示 ArrayList线程不安全: 两条线程都往ArrayList集合中添加10万个元素public class MyThread1 extends Thread{ //共享变量 static ArrayList<Integer> list = new ArrayList<>(); @Override public void run() { // 任务:往集合中添加100000个原创 2021-08-26 22:31:06 · 123 阅读 · 0 评论 -
AtomicInteger类
1.AtomicInteger类Atomic 关键字 这个关键字不存在java.util.concurrent.atomic 包路径下 定义了一些对【变量】操作的【原子类】- java.util.concurrent.atomic.AtomicInteger: 对int类型变量操作的【原子类】- java.util.concurrent.atomic.AtomicLong: 对long类型变量操作的【...原创 2021-08-26 22:21:17 · 285 阅读 · 0 评论 -
Java之volatile
1.volatile可以解决可见性 解决办法,使用volatile关键字修饰共享变量 当共享变量被修饰为volatile时,就会迫使线程每次使用此变量,都会区主内存获取,保证其可见性 volatile关键字只能修饰 【成员变量】 volatile关键字可以解决变量的可见性 、有序性public class MyThread extends Thread{ // 共享变量(主线程和子线程共享) volatile static boolean ...原创 2021-08-26 22:14:01 · 103 阅读 · 0 评论 -
Java多线程运行机制与多线程的安全性问题
1.多线程运行机制: 1.当一个线程启动后,JVM会为其分配一个独立的 【线程栈区】 这个线程在这个独立的栈区中运行 2.线程的调度就是抢占式public class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("小强的第...原创 2021-08-25 22:04:49 · 170 阅读 · 1 评论 -
Java之线程安全
1.线程安全问题:需求:模拟火车票100张 售票窗口分析: 1.售票窗口使用线程来模拟 2.开4个窗口同时卖100张票 3.4个窗口卖票的任务是一样public class MyRunnable implements Runnable { int tickets = 100; @Override public void run() { while (true){ if (tickets &l...原创 2021-08-25 21:54:00 · 157 阅读 · 0 评论 -
Java创建线程的方式及Thread线程的API
创建线程方式一:继承Thread类1.创建子类继承Thread类2.在子类中复写run方法,把线程需要执行的任务代码放在run方法中3.创建子类线程对象4.调用start方法启动线程,执行任务代码MyThread类/** 继承Thread类* */public class MyThread extends Thread{ /* * 覆写run方法 * */ @Override p...原创 2021-08-25 21:40:25 · 160 阅读 · 0 评论 -
Java线程与进程
1.进程:进程是程序的一次执行过程,是系统运行程序的基本单位系统运行一个程序即是一个进程从创建、运行、到消亡的过程每个进程都有一个独立的内存空间,一个应用进程可以同时运行多个进程【进程 其实就是应用程序的可执行单位.exe文件】【每个进程都有一个独立的空间,一个应用程序可以同时运行多个进程】2.线程:是进程的执行单元,负责当前进程中程序的进行,一个程序中至少有一...原创 2021-08-25 21:31:44 · 329 阅读 · 0 评论