多线程
crazyK.
代码小白
展开
-
多线程交替打印ABC
常见题型多线程交替打印,持续更新。原创 2023-06-29 11:09:55 · 219 阅读 · 0 评论 -
线程池(通俗易懂)
目录一、什么是线程池二、创建线程池的方式三、线程池的七大参数四、四种拒绝策略1.AbortPolicy()2.CallerRunsPolicy()3.DiscardPolicy()4.DiscardOldestPolicy()五、自定义一个线程池1.场景描述2.代码实现一、什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务...原创 2022-04-22 16:20:49 · 12644 阅读 · 0 评论 -
ArrayList、HashSet线程不安全集合
一、不安全示例ArrayList是java集合框架中一个重要的类,是一个长度可变的集合。在多线程环境下的操作ArrayList是不安全的,会抛出并发修改异常ConcurrentModificationException。话不多说,上示例:在for循环中new了十个线程,每一个线程都向list中添加元素public class ListTest { public static void main(String[] args) { List<String> li原创 2022-04-15 16:27:18 · 2883 阅读 · 0 评论 -
两个线程不安全样例
一、模拟买票public class UnSafeBuyTicket { public static void main(String[] args) { BuyTicket buyTicket = new BuyTicket(); new Thread(buyTicket,"我").start(); new Thread(buyTicket,"你们").start(); new Thread(buyTicket,"黄牛党").s原创 2022-04-10 12:00:35 · 320 阅读 · 0 评论 -
线程同步机制
目录一、线程同步机制二、同步方法三、同步块一、线程同步机制 处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时需要线程同步,线程同步是一种等待机制,多个县农村需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用 解决方法:队列和锁 保证线程同步的安全性 由于同一进程的多个线程共享一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加锁原创 2022-04-10 12:18:01 · 3957 阅读 · 0 评论 -
守护线程(daaemon)
线程分为用户线程和守护线程 虚拟机必须确保用户执行完毕 虚拟机不用等待守护线程执行完毕 如,后台记录操作日志,监控内存,垃圾回收等 public class TestDaemon { public static void main(String[] args) { God god = new God(); You you = new You(); Thread thread = new Thread(god);..原创 2022-04-10 10:17:40 · 758 阅读 · 0 评论 -
生产者消费者问题
一、场景 假设容器中只能存放一件物品,生产者将生产出的产品放入容器,消费者将从容器产品取走消费 如果容器中没有产品,则生产者将产品放入容器,,否则停止生产并等待,直到容器中的产品被消费者取走为止 如果容器中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到容器中再次放入产品为止 对于生产者,没有生产产品之前,要通知消费者等待。而生产了产品之后,又需要马上通知消费者消费 对于消费者,在消费之后,要通知生产者已经结束消费,需要生产新的产品以供消费原创 2022-04-08 15:59:31 · 286 阅读 · 0 评论 -
线程优先级
现代操作系统基本采用分时的形式调度运行的线程,操作系统会分出一个个的时间片,线程会分配到若干的时间片,当线程的时间片用完就会发生线程,并等待下次分配。线程分配到的时间片多少也就决定了线程使用处理器的资源多少,而线程的优先级就是决定线程需要多或者少分配一些处理器资源的线程属性 线程的优先级用数字表示,范围从1-10 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PR...原创 2022-04-04 15:29:41 · 410 阅读 · 0 评论 -
线程状态观测
一、线程状态Java线程在运行生命周期中可能处于一下六种状态,在给定的一个时刻,线程只能处于其中一种状态状态名称 说明 NEW 初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE 运行状态,java线程将操作系统中的就绪和运行两种状态统称作“运行中” BLOCKED 阻塞状态,表示线程阻塞于锁 WAITING 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断) TIME_WA原创 2022-04-04 14:42:16 · 229 阅读 · 0 评论 -
线程停止的方式
1.线程正常停止建议让线程正常停止,用for循环限制次数,死循环会让CPU满。2.使用标志位设置一个标志位,利用条件进行判断,当不满足条件时,停止线程public class StopTest implements Runnable{ //设置标志位 private boolean flag = true; @Override public void run() { int i = 0; //当标志位为true时,线程运行原创 2022-04-02 22:25:24 · 866 阅读 · 0 评论 -
使用Runnable实现龟兔赛跑
龟兔赛跑的故事相信大家都知道,这里我们用Runnable创建两个线程,来模拟兔子和乌龟;用Thread.sleep()模拟兔子睡觉;在线程中写一个for循环模拟赛跑,先跑到指定步数(距离)的获胜,话不多说,直接上代码public class Race implements Runnable{ //胜利者 private static String winner; @SneakyThrows @Override public void run...原创 2022-04-02 12:41:25 · 459 阅读 · 0 评论 -
多线程下载图片
准备工作首先需要commons io的工具包,下载连接附上Commons IO – Download Apache Commons IO新建一个lib包,将下载解压之后将commons-io-2.11.0.jar复制到idea的lib包中add as library将其添加到库中,添加之后是可展开的实现先写一个下载器,用java.io的File类实现//下载器class WebDownloader{ //下载方法 public void dow..原创 2022-04-02 10:28:05 · 716 阅读 · 0 评论 -
如何创建线程
一、Thread1.自定义线程类继承Thread类2.重写run()方法,编写线程执行体3.创建线程对象,调用.start()方法启动线程(使线程进入就绪态)也可以直接new一个Thread对象,在run方法中编写执行体,然后.start()启动线程public class Thread1 extends Thread{ //run方法线程体 @Override public void run(){ for (int i = 0; i <原创 2022-04-02 10:46:14 · 875 阅读 · 0 评论 -
死锁(含java代码示例)
一、什么是死锁死锁指多个进程在运行过程中因争夺资源而造成的一种僵局,若进程处于这种状态时,若无外力作用,它们都无法再向前推进。此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。erpublic class DeadLockDemo { private static String A = "A"; private static String B = "B"; public stat...原创 2022-03-31 17:36:14 · 908 阅读 · 0 评论