![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
执妄
不会数学也不想写代码
展开
-
线程池
线程池 背景:经常创建和销毁,使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用 好处: 提高响应速度 降低资源消耗 便于线程管理 corePoolSize:核心池的大小 maximumPoolSize:最大线程数 keepAliveTime:线程没有任务时最多保持多长时间后会终止 JDK5.0开始提供了线程池相关的API:ExecutorService和ExecuTo原创 2020-11-26 20:33:19 · 52 阅读 · 0 评论 -
生产者-消费者问题
一、生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库吗,消费者将仓库中产品取走消费 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止 如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止 二、管程法 生产者:负责生产数据的模块(可能是方法,对象,线程,进程) 消费者:负责处理数据的模块(可能是方法,对象,线程,进程) 缓冲区:消费者不能直接使用生产者的数据,它们之间有个缓冲区 生产原创 2020-11-26 20:07:42 · 129 阅读 · 0 评论 -
死锁
一、死锁 package lock; /** * 死锁:多个线程互相拥有对方需要的资源,形成僵持 */ public class DeadLock { public static void main(String[] args) { Makerup g1 = new Makerup(0, "灰姑凉"); Makerup g2 = new Makerup(1, "白雪公主"); g1.start(); g2.start();原创 2020-11-26 17:15:36 · 133 阅读 · 2 评论 -
线程同步
一、线程同步 由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问的冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized,当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即可,存在以下问题: 一个线程持有锁会导致其他所有需要此锁的线程挂起 在多线程竞争的情况下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题 如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题 二、同步方法原创 2020-11-26 16:41:04 · 76 阅读 · 0 评论 -
守护线程
守护线程 进程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如:后台记录操作日志,监控内存,垃圾回收等待 package threadstate; /** * 测试守护线程 * 上帝守护你 */ public class DaemonTest { public static void main(String[] args) { God god = new God(); You you = new You();原创 2020-11-26 14:18:18 · 53 阅读 · 0 评论 -
线程优先级
线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行 线程的优先级用数字表示,范围从1~10 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRIORITY = 5; 使用以下方式改变或获取优先级 getPriority setPriority(int xxx) 优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了原创 2020-11-26 14:03:41 · 59 阅读 · 0 评论 -
线程状态
一、线程停止 不推荐使用JDK提供的stop()、destory()方法 推荐线程自己停下来 建议使用一个标志位进行终止变量,当flag=false时,则终止线程运行 package threadstate; /** * 测试stop * 1.建议 线程正常停止----利用次数,不建议死循环 * 2.建议使用标志位----设置一个标志位 * 3.不要使用stop或者destroy等过时或者JDK不建议使用的方法 */ public class ThreadStop implements Ru原创 2020-11-24 20:46:35 · 76 阅读 · 0 评论 -
lambda表达式
** 函数式接口的定义:** 任何接口如果只包含一个抽象方法,那么它就是一个函数式接口 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象 *** 为什么要用lambda表达式** 避免内部类定义过多 可以让你的代码看起来简洁 去掉了一堆没有意义的代码,只留下核心的逻辑 (params)->expression(表达式) (params)->statement(语句) (params)->{statements} package lambda; /** *..原创 2020-11-24 20:28:51 · 53 阅读 · 1 评论 -
静态代理模式
package proxystatic; /** * 静态代理模式 * 真实对象和代理对象都要实现同一个接口 * 代理对象要代理真实角色 * 好处: * 代理对象可以做很多真实对象做不了的事情 * 真实对象专注做自己的事情 */ import java.util.Map; public class StaticProxy { public static void main(String[] args) { WeddingCompany weddi原创 2020-11-24 19:49:08 · 68 阅读 · 0 评论 -
创建线程的方式
继承Thread类 package threadclass; /** * 创建线程方式一:继承Thread类,重写run()方法,调用start开启线程 */ public class ThreadTest extends Thread { @Override public void run() { //run方法线程体 for (int i = 0; i < 2000; i++) { System.out.println(原创 2020-11-24 13:48:16 · 53 阅读 · 1 评论