![](https://img-blog.csdnimg.cn/943bd4f70d8446dba53b71ffec6e26f7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java多线程
Java多线程笔记
魏小祖
选择目标,然后保持热爱。
展开
-
Java线程池
线程池使用线程池背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。好处:提高效应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不用每次都创建)便于线程管理(…)corePoolSize:核心池的大小maximumPoolSize:最大线程数KeepAliveTime:线程没有任务时最多保原创 2022-04-14 14:44:43 · 88 阅读 · 0 评论 -
Java多线程Lock锁
Lock(锁)从JDK5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当;java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象;***ReentrantLock(可重入锁)*类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常原创 2022-04-13 19:12:08 · 370 阅读 · 0 评论 -
Java死锁
死锁什么是死锁?多个线程各自占有一些资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能发生”死锁“的问题。Code:化妆一个人有镜子,一个人有口红,都想要对方的资源主线程main方法// 主线程main方法public class DeadLockClass { public static void main(String[] args) { Ma原创 2022-04-13 19:05:38 · 585 阅读 · 0 评论 -
Java同步方法及代码块
同步方法及代码块:synchronized同步方法由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方法和sychronized块同步方法:public synchronized void method(int args){}synchronized方法控制对“对象”的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的原创 2022-04-13 19:02:16 · 1829 阅读 · 0 评论 -
Java线程同步机制
线程同步机制多个线程操作同一个资源并发:同一个对象被多个线程同时操作线程同步现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队。一个一个来。处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时候我们就需要线程同步。线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用由于同一进程的多个线程共享同一块储存空间,在带来方便的同时原创 2022-04-13 17:29:30 · 877 阅读 · 0 评论 -
Java守护线程
守护线程守护线程 : setDaemon();线程分为用户线程和守护线程;虚拟机必须确保用户线程执行完毕;虚拟机不用等待守护线程执行完毕;如,后台记录操作日志,监控内存,垃圾回收等待…Code守护线程// 守护线程public class God implements Runnable{ @Override public void run() { while (true){ System.out.println("你好原创 2022-04-11 18:34:43 · 1167 阅读 · 0 评论 -
Java线程的优先级
线程的优先级 线程优先级:getPriority() setPriority(int x)Java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度那个线程来执行。线程的优先级用数字来表示,范围1~10。Thread.MIN_PRIORITY = 1; 最小优先级Thread.MAX_PRIORITY = 10; 最大优先级Thread.NORM_PRIORITY = 5; 默认优先级(main方法)使用一下方式改原创 2022-04-11 15:19:48 · 1727 阅读 · 0 评论 -
Java观测线程状态
观测线程状态观测线程状态:Thread.State 线程终止:Thread.State.TERMINATED线程5个状态Codepublic class StateTest { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { // 线程体 for (int原创 2022-04-11 14:23:37 · 147 阅读 · 0 评论 -
Java线程强制执行
线程强制执行线程强制执行 :Thread.join();Join合并线程,待此线程执行完成后,在执行其它线程,其他线程阻塞;可以想象成插队 Codepublic class JoinTest implements Runnable{ @Override public void run() { for (int i = 1; i <= 100; i++) { System.out.println("VIP原创 2022-04-11 10:00:36 · 382 阅读 · 0 评论 -
Java线程礼让
线程礼让礼让 : Thread.yield();礼让线程,让当前正在执行的线程暂停,但不阻塞将线程从运行状态转为就绪状态让cpu重新调度,礼让不一定成功!看CPU心情Code// 礼让class MyYield implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName() + "线程开始");原创 2022-04-11 09:59:30 · 458 阅读 · 0 评论 -
Java线程休眠
线程休眠线程休眠:Thread.sleep();sleep(时间)指当前线程阻塞的毫秒数; (1000毫秒 = 1秒)sleep存在异常InterruptedException;sleep时间达到后线程进入就绪状态;sleep可以模拟网络延时,倒计时等;每一个对象都有一个锁,sleep不会释放锁。sleep():模拟网络延时最大的作用:放大问题的发生性public class SleepTest implements Runnable{ private int num原创 2022-04-11 09:58:09 · 2649 阅读 · 0 评论 -
Java停止线程
线程停止线程五大状态1、2、线程方法setPriority (int newPriority) :更改线程的优先级static void sleep(long millis) :在指定的毫秒数内让当前线程正在执行的线程睡眠void join() : 等待该线程终止static void yield() : 暂停当前正在执行的线程对象,并执行其他线程void interrupt() : 中断线程,不建议使用boolean is isAlive() : 测试线程是否处于原创 2022-04-10 17:51:52 · 327 阅读 · 0 评论 -
Java中Lambda表达式
Lambda表达式什么是lambda表达式λ 希腊字母表中排序第十一位的字母,英语名称为Lambda避免匿名内部类定义过多其实质属于函数式编程的概念(params) -> expression[表达式](params) -> statement[语句](params) -> {statements}a -> System.out.println("I Love lambda -->" + a);理解Functional Interfac原创 2022-04-10 16:01:56 · 356 阅读 · 0 评论 -
Java静态代理模式
静态代理模式静态代理模式真实对象和代理对象都要实现同一个接口代理对象要代理真实角色好处代理对象可以做很多真实对象做不了的事情真实对象可以专注做自己的事情人间四大喜事洞房花烛夜, 金榜题名时, 他乡遇故知, 久旱逢甘露。案例 (结婚)真实对象:you代理对象:company(婚庆公司)接口:结婚(marry)interface Marry{ void happyMarry();}真实对象:你(you)class You imple原创 2022-04-10 13:18:30 · 131 阅读 · 0 评论 -
Java线程创建(实现Callable接口)
线程创建(实现Callable接口)实现Callable接口,需要返回值类型;重写call方法,需要抛出异常;创建目标对象;创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);提交执行:Future<Boolean> result1 = ser.submit(t1);获取结果:boolean r1 = result1.get();关闭服务:ser.shutdownNow(原创 2022-04-10 12:21:16 · 2908 阅读 · 0 评论 -
Java多线程(龟兔赛跑)
线程(龟兔赛跑)龟兔赛跑首先定义赛道距离,最后要离终点越来越近;(定义了100步)判断比赛是否结束;打印出胜利者;龟兔赛跑开始;故事中是乌龟赢得,兔子需要睡觉,所以我们来模拟兔子睡觉终于,乌龟赢得了比赛Codepublic class MatchDemo_05 implements Runnable{ private static String winner; // 胜利者 @Override public void run() { f原创 2022-04-09 23:13:59 · 1215 阅读 · 0 评论 -
Java购买火车票(初识并发)
初识并发(购买火车票)购买火车票发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱。Code:public class TicketDemo_04 implements Runnable{ private int ticketNumber = 10; // 票数 @Override public void run() { while (true){ if (ticketNumber <= 0) {原创 2022-04-09 21:06:33 · 556 阅读 · 0 评论 -
Java线程创建(实现Runnable接口)
线程创建(实现Runnable接口)定义MyRunnable类实现Runnable接口;实现run()方法,编写线程执行体;创建线程对象,调用start()方法启动线程。推荐使用Runnable对象,因为Java单继承的局限性codepublic class RunnableDemo_03 implements Runnable{ /** * 1、实现Runnable接口 * 2、重写run方法,执行线程需要丢入Runnable接口实现类 * 3、原创 2022-04-09 15:48:27 · 956 阅读 · 0 评论 -
Java多线程(下载网络图片)
多线程(下载网络图片)准备工作导入jar包将jar包添加到IDEA中Codepublic class ThreadDemo_02 extends Thread{ private String name; // 保存网络图片名称 private String url; // 保存网络图片地址 public ThreadDemo_02(String name , String url) { this.name = name; t原创 2022-04-09 14:29:59 · 661 阅读 · 0 评论 -
Java线程创建(继承Thread类)
线程创建(继承Thread类)Thread、Runnable、Callable线程创建有3种方法继承Thread类;实现Runnable接口;实现Callable接口。继承Thread类步骤:继承Thread类 --> 重写run()方法 --> 调用start()开启线程public class ThreadDemo_01 extends Thread{ //继承Thread类 @Override public void run() { //原创 2022-04-09 09:48:57 · 398 阅读 · 0 评论 -
Java线程简介
线程简介任务,进程,线程,多线程任务比如说我们可以边吃饭边玩手机,边开车边打电话…现实生活中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时间依旧只做了一件事情,只是大脑切换太快我们误以为同一时间干了多件事情。进程(Process)与线程(Thread)说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。通常在一个进程中可以包含原创 2022-04-09 09:14:22 · 138 阅读 · 0 评论