![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
太阳石笑笑
这个作者很懒,什么都没留下…
展开
-
玩转java多线程 之多线程基础 回顾总结线程的创建
好了,回顾一下,创建线程的三种方式:package duoxiancheng;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.Future;import java.util.concurrent.FutureTask;//回顾总结线程的创建public class ThreadNew { public sta原创 2020-10-11 14:00:11 · 228 阅读 · 6 评论 -
玩转java多线程 之多线程基础 解决生产者消费者问题 线程池实践
线程池:经常创建和销毁使用量特别大的资源,比如并发情况下的线程,对性能影响很大通过提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁,实现重复利用线程池可以提高响应速度,降低资源消耗,便于线程管理JDK5.0提供了线程池相关的api,executorService和excutorsexecutorService:真正的线程池接口,常见子类ThreadPoolExecutor执行任务,没有返回值,一般用来执行Runnablevoid execute(Runna原创 2020-10-11 13:50:28 · 297 阅读 · 0 评论 -
玩转java多线程 之多线程基础 解决生产者消费者问题 信号灯法实践
信号灯法实践:package duoxiancheng;//测试生产者消费者问题,信号灯法public class TestPc2 { public static void main(String[] args) { TV tv = new TV(); new Player(tv).start(); new Watcher(tv).start(); }}//生产者:演员class Player extends Thread {原创 2020-10-11 13:32:51 · 96 阅读 · 0 评论 -
玩转java多线程 之多线程基础 解决生产者消费者问题 管程法实践
管程法实践:package duoxiancheng;//测试生产者消费者模型,利用管程法缓冲区来解决//生产者,消费者,产品,缓冲区public class TestPc { public static void main(String[] args) { SynContainer synContainer = new SynContainer(); new Productor(synContainer).start(); new Con原创 2020-10-11 12:37:19 · 104 阅读 · 0 评论 -
玩转java多线程 之多线程基础 生产者消费者问题 以及 解决此类问题的方法
有两个线程,一个生产线程,一个消费线程应用场景:假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者取走消费假设没有商品,生产者将产品放入仓库,否则停止生产并等待,直到仓库中产品被消费者取走为止如果有产品,消费者取走消费,否则停止消费等待,直到仓库中有产品为止...原创 2020-10-10 09:01:54 · 538 阅读 · 0 评论 -
玩转java多线程 之多线程基础 Lock锁实战练习
从JDK5.0开始,java提供了更强大的线程同步机制,通过显式定义同步锁对象来实现同步,同步锁用Lock对象充当。java.util.concurrent.locks Lock接口是控制多个线程对共享资源进行访问的工具,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应该先获得Lock对象。ReentrantLock类实现了Lock, 它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以原创 2020-10-10 08:50:14 · 424 阅读 · 0 评论 -
玩转java多线程 之多线程基础 死锁四个必要条件以及实战练习
多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,以及同一个同步块同时拥有两个以上对象的锁时,可能发生死锁的问题。...原创 2020-10-09 09:03:38 · 120 阅读 · 0 评论 -
玩转java多线程 之多线程基础 CopyOnWriteArrayList
在java5.0提供了java.util.concurrent(简称JUC)包,在此包中增加了并发编程常用的工具类写个例子:package duoxiancheng;import java.util.concurrent.CopyOnWriteArrayList;//测试JUC安全类型的集合public class TestJUC { public static void main(String[] args) { CopyOnWriteArrayList<Str原创 2020-10-09 08:46:57 · 117 阅读 · 2 评论 -
玩转java多线程 之多线程基础 同步方法及同步块 实现线程同步(超详细)
由于可以通过private关键字来保证数据对象只被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchroinzed关键字,包括两种用法,synchronized方法和synchronized块同步方法public synchronized void method(int args){}sychronized方法控制对 对象的访问的,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释原创 2020-10-09 08:37:51 · 189 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程不安全案例实战(超详细)
先去写三个例子来看一下:原创 2020-10-07 11:56:29 · 166 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程同步机制
线程同步就是针对:多个线程操作同一个资源并发:同一个对象被多个线程同时操作处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这时需要线程同步,线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池,等待前面的线程使用完毕,下一个线程继续使用通常用队列和锁来解决线程同步很通俗的例子,就是上厕所排队,然后厕所门上上锁,狂神真是人才,想出这么有趣的例子每个对象都有一把锁,队列和锁可以保证线程的安全性为了保证数据在方法之中被访问时的正确性,在访问时加入锁机原创 2020-10-07 11:54:59 · 231 阅读 · 4 评论 -
玩转java多线程 之多线程基础 守护线程
守护(daemon)线程线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕比如后台记录操作日志,监控内存,垃圾回收等待直接看下代码:package duoxiancheng;public class TestDaemon { public static void main(String[] args) { Godis godis = new Godis(); Youare youare = new Youare();原创 2020-10-07 11:36:28 · 73 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程优先级
Java提供一个线程调度器监控程序宏启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行线程的优先级用数字表示,范围从1~10可以通过以下的方式改变或者获取优先级getPriority()setPriority(int xxx)从thread源码看的package duoxiancheng;public class TestPriority { public static void main(String[] args) { //主线程默认原创 2020-10-06 16:32:35 · 117 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程观测状态
回顾一下,线程的五个状态:new:新生状态runnable:java虚拟机中执行的线程所属的状态blocked:被阻塞等待监视器锁定的线程处于此状态time_waiting:正在等待另一个线程执行特定的动作达到指定时间的线程处于此状态terminated:已经退出的线程处于此状态一个线程可以在给定时间点处于一个状态,这些状态是不反映任何操作系统线程状态的虚拟机状态在java里面对应一个常量,下面看一下例子:package duoxiancheng;public class TestSta原创 2020-10-06 16:18:36 · 103 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程强制执行 join函数
Join合并线程,待此线程执行完成之后,再执行其他线程,其他线程阻塞,可以想象成插队实践一下:package duoxiancheng;public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("线程vip来了" + i); }原创 2020-10-06 16:04:07 · 155 阅读 · 3 评论 -
玩转java多线程 之多线程基础 线程礼让 yield
礼让线程,让当前正在执行的线程停止,不阻塞将线程从运行状态转为就绪状态让CPU重新调度,礼让不一定成功,看CPU心情看下代码:package duoxiancheng;public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield, "a").start(); new原创 2020-10-04 10:53:25 · 150 阅读 · 2 评论 -
玩转java多线程 之多线程基础 线程休眠 sleep
线程休眠:sleep时间指定当前线程阻塞的毫秒数sleep存在异常 InterruptedExceptionsleep时间达到线程后线程进入就绪状态sleep可以模拟网络延时,倒计时等每一个对象都有一个锁,sleep不会释放锁模拟网络延时,可以放大问题的发生性比如之前买票的例子:package duoxiancheng;//模拟网络延时public class TestSleep implements Runnable{ //票数 private int ticket原创 2020-10-04 10:42:02 · 128 阅读 · 0 评论 -
玩转java多线程 之多线程基础 线程状态 及线程停止实战
从网上先找了下,觉得这两张图比较好比较清楚的看到线程的5大状态新生状态:Thread t = new Thread()线程对象一旦创建,就进入到新生状态就绪状态当调用start()方法,线程立即进入就绪状态的,但是并不意味着立即调度执行阻塞状态:当调用sleep,wait或者是同步锁定时,线程进入阻塞状态,代码不往下继续执行,阻塞事件解除后,重新进入就绪状态,等待cpu的调度执行运行状态:进入运行状态,线程真正执行线程体的代码块dead状态:线程中断或者结束,一旦进入死亡状态,原创 2020-10-03 12:04:49 · 158 阅读 · 0 评论 -
玩转java多线程 之多线程基础 lambda表达式(超详细)
使用lambda表达式的原因是:避免匿名类定义过多可以让代码看起来简洁去掉没有意义的代码,只留下核心逻辑理解Functional Interface(函数式接口)是学习lambda表达式的关键函数式接口定义:任何接口,如果只包含一个抽象方法,那就是一个函数式接口对于函数式接口,可以通过lambda表达式创建该接口的对象package duoxiancheng;//推导lambda表达式public class TestLambda { //3.静态内部类 static原创 2020-10-03 11:38:31 · 902 阅读 · 0 评论 -
玩转java多线程 之多线程实战 静态代理模式
直接用代码实现一下:package duoxiancheng;public class StaticProxy { public static void main(String[] args) { //真实对象,you You you = new You(); WeddingCompany weddingCompany = new WeddingCompany(you); weddingCompany.HappyMarry();原创 2020-10-02 13:37:49 · 111 阅读 · 0 评论 -
玩转java多线程 之多线程创建 实现Callable接口
这种创建线程的方法,只做了解分为以下几步:第一步: 实现Callable接口,需要返回值类型第二步: 重写call方法,需要抛出异常第三步: 创建目标对象第四步: 创建执行服务ExecutorService ser = Executors.newFixedThreadPool(1);第五步:提交执行Future<Boolean> result1 = ser.submit(t1);第六步:获取结果boolean r1 = result1.get()第七步:关闭服务se原创 2020-10-02 12:43:05 · 157 阅读 · 0 评论 -
玩转java多线程 之多线程实践 模拟龟兔赛跑
多线程实践一下首先需要有一个赛道距离,离终点越来越近判断比赛是否结束打印出比赛胜利者龟兔赛跑开始兔子睡觉,用sleep方法模拟乌龟赢得比赛直接看代码:package duoxiancheng;//模拟龟兔赛跑public class Race implements Runnable{ //胜利者 private static String winner; @Override public void run() { for (int i原创 2020-09-29 09:03:05 · 340 阅读 · 0 评论 -
玩转java多线程 之初识线程 并发问题
初识线程 并发问题原创 2020-09-28 10:41:56 · 131 阅读 · 0 评论 -
原创 玩转java多线程 之线程创建 实现Runnable接口
实现Runnable接口原创 2020-09-25 09:10:30 · 95 阅读 · 0 评论 -
玩转java多线程 之线程实战练习 从网上下载图片
这个明天更新原创 2020-09-24 09:08:15 · 123 阅读 · 0 评论 -
玩转java多线程 之线程创建 (详细)
线程创建有三种方式:第一:继承Thread类(重点)第二:实现Runnable接口(重点)第三:实现Callable接口(了解)代码明天给大家补充完整~原创 2020-09-23 09:04:37 · 133 阅读 · 0 评论 -
玩转java多线程 之初识多线程
现实中也有很多例子,看起来是多个任务在做,其实本质上,我们的大脑在同一时间只做了一件事情一个进程可以有多个线程程序是指令和数据的有序集合,本身没有任何运行的含义,是一个静态的概念进程是执行程序的一次执行过程,是一个动态的概念,是系统资源分配的单位一个进程中可以包含若干个线程,一个进程中至少有一个线程,比如main线程,线程是cpu调度和执行的单位很多多线程是模拟出来的,真正的多线程是指由多个cpu,多核,如果是模拟出来的多线程,在一个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换原创 2020-09-23 08:58:19 · 120 阅读 · 0 评论