多线程
yuan_boss
网络安全领域知识博主
展开
-
14线程池
线程池JDK5.0起提供了线程池相关的API:ExecutorService和Executors(工具类)ExecutorService是真正的线程池接口。常见子类为ThreadPoolExecutorvoid execute(Runnable command):执行任务/命令,没有返回值,一般用来执行Runnable Future submit(Callable task):执行任务,有返回值,一般用来执行Callablevoid shutdown():关闭连接池Executors:工具类、原创 2021-07-15 19:06:06 · 56 阅读 · 0 评论 -
13线程通信(生产者消费者模式)
线程通信之生产者消费者模式生产者消费者模式不是23种设计模式之一,它是一个问题这是一个线程同步的问题,生产者和消费者共享一个资源,并且生产者和消费者之间相互依赖,互为条件对于生产者,没有生产产品之前,需要通知消费者等待(wait),而生产了产品之后需要通知消费者消费(唤醒notifAll)对于消费者,在消费之后,要通知生产者已结束消费,需要生产新的产品来提供消费在生产者消费者问题中仅有synchronized是不够的,他可阻止并发更新同一个共享资源,实现了同步,但是不能实现不同线程之间的通信J原创 2021-07-15 19:05:09 · 136 阅读 · 0 评论 -
12synchronized与lock的对比
synchronized与lockLock:1.Lock是JUC的接口(java.util.concurrent.locks.Lock),该接口是控制多个线程对共享资源进行访问的工具,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象2.ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全控制中,比较常用的是ReentrantLock,可以显式加锁、释放锁对比:1.Lock是原创 2021-07-15 19:03:23 · 77 阅读 · 0 评论 -
11死锁(同步方法块的嵌套)
死锁死锁:多个线程互相抱着对方需要的资源,然后形成僵持产生死锁的四个必要条件1.互斥条件:一个资源每次只能被一个进程使用2.请求与保持条件:一个进程因请求资源而堵塞时,对已获得的资源保持不放3.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系上面的四个死锁必要条件,我们只需要想办法破除其中的任意一个或多个即可避免死锁发生注意:为了确保使用的是同一个资源,该资源一定要被static修饰,否则就变成了多个线程使用不同的资源原创 2021-07-15 19:02:28 · 205 阅读 · 0 评论 -
10通过同步方法或者同步块解决线程不安全问题
同步方法与同步块使用同步方法或者同步块的时候需要知道增加,删除,修改的对象是哪一个,再对此对象进行synchronized修饰,synchronized方法控制"对象"的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面阻塞的线程才能获得这个锁,继续执行缺陷:若将一个大的方法申明为synchronized 将会影响效率总结:1.方法里面需要修改的内容才需要锁,锁的太多,浪费资源2.原创 2021-07-14 22:42:29 · 70 阅读 · 1 评论 -
9三大线程不安全案例
线程不安全案例一:线程不安全的ArrayListArrayList集合是线程不安全的,因为多个线程添加元素的时候可能是在同一个瞬间,导致将多个元素添加至同一个位置,造成覆盖问题,例如代码:public class UnSafeList { public static void main(String[] args) throws InterruptedException { List<String> list = new ArrayList<>();原创 2021-07-14 22:41:19 · 685 阅读 · 0 评论 -
8守护线程
守护线程线程分为用户线程与守护线程,所有的线程都默认是用户线程,通过setDaemon(true)将线程设置为守护线程,其中GC(垃圾回收器)就是守护线程虚拟机必须确保用户线程执行完毕,不用等待守护线程执行完毕,当用户线程执行完毕之后,守护线程还会执行一段时间,因为用户线程执行完之后虚拟机停止需要一定的时间守护线程一般用于记录操作日志,监控内存,垃圾回收等详细代码://测试守护线程//上帝守护你public class TestDaemon { public static void m原创 2021-07-14 22:37:25 · 57 阅读 · 0 评论 -
7线程优先级
线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行线程的优先级用数字来表示,范围从1—10 Thread. MIN_PRIORITY = 1; Thread.NORM_PRIORITY = 5; Thread.MAX_PRIORITY = 10;通过以下方式来改变或获取优先级setPriority(int x) getPriority()优先级的设定建议在start()前面线程优先级最小为原创 2021-07-14 22:35:37 · 49 阅读 · 0 评论 -
6线程状态
线程状态状态:新生状态:new一个Thread就绪状态:调用start()方法后立即进入,但不意味着立即调度执行阻塞状态:调用sleep,wait,join或同步锁定时,线程进入阻塞状态,此时代码不会继续执行,等待阻塞解除之后重新进入就绪状态等待CPU调度执行运行状态:进入运行状态线程才真正执行代码块死亡状态:线程中断或结束,一旦死亡,不能再次启动也可参照下图理解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndoNLERe-1626273037729)(H:原创 2021-07-14 22:34:20 · 81 阅读 · 0 评论 -
5线程的停止,休眠,礼让、强制执行
线程 停止、休眠、礼让、强制执行线程停止:/** * 停止线程不推荐使用JDK提供的stop或者destroy(已废弃) * 推荐线程自己停下来 * 建议使用一个标志位进行终止变量,当flag=false,则线程终止运行 */通过标志位来终止变量进而终止线程,具体代码实现如下:public class TestStop implements Runnable { //设置一个标志位 boolean flag = true; @Override public原创 2021-07-14 22:30:22 · 69 阅读 · 0 评论 -
4Lambda表达式
如何写Lambda表达式?1.必须有函数式接口:只有一个抽象方法的接口,如:interface ILike{ void lambda(int a,int b);}2.Lambda表达式在只有一行代码的情况下才可以简化成为一行,如果有多行,就必须用代码块(花括号)包裹3.一个或多个参数都可以去掉参数类型,要去掉就都去掉参数类型,并且必须加上括号简化流程:1.匿名内部类 like = new ILike() { @Override原创 2021-07-14 22:28:52 · 71 阅读 · 0 评论 -
3静态代理模式
多线程底层—静态代理/**静态代理模式总结:真实对象和代理对象都要实现同一个接口代理对象要代理真实角色优点:代理对象可以做很多真实对象做不了的事情真实对象专注做自己的事情*/ new Thread(()->System.out.println("你好啊")).start(); new WeddingMarry(new You()).happyMarry();以上两行代码是类似的,都是静态代理模式,其中结婚业务的代理对象是W原创 2021-07-14 22:27:31 · 50 阅读 · 0 评论 -
2多线程之龟兔赛跑案例
龟兔赛跑1.首先来个赛道距离,然后距离终点越来越近(for循环实现)2.判断比赛是否结束3.打印出胜利者4.龟兔赛跑开始5.故事中乌龟胜利,兔子需要睡觉,所以需要模拟兔子睡觉6.乌龟赢得比赛模拟兔子睡觉:当线程名字为兔子的时候并且规定兔子每跑10米都会休息,即调用Thread.sleep()方法for循环模拟跑步距离越来越长,通过判断是否结束比赛来确定程序是否继续执行//模拟龟兔赛跑public class Race implements Runnable{ //胜利者原创 2021-07-14 22:26:24 · 177 阅读 · 0 评论 -
1创建线程的方式
如何创建线程?!!! 文章末尾附带代码理解方式一:1.继承Thread类2.重写run方法编写线程执行体3.调用start方法开启线程方式二:1.实现Runnable接口2.重写run方法编写线程执行体3.将执行线程的丢入Runnable接口的实现类,调用start方法 TestThread1 testThread1 = new TestThread1(); testThread1.start();方式三:1.实现Callable接口,需要返回值类型2.重写call方法,需要抛原创 2021-07-14 22:13:40 · 61 阅读 · 2 评论