
多线程
执妄
不会数学也不想写代码
展开
-
线程池
线程池背景:经常创建和销毁,使用量特别大的资源,比如并发情况下的线程,对性能影响很大思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用好处:提高响应速度降低资源消耗便于线程管理corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止JDK5.0开始提供了线程池相关的API:ExecutorService和ExecuTo原创 2020-11-26 20:33:19 · 88 阅读 · 0 评论 -
生产者-消费者问题
一、生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库吗,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止二、管程法生产者:负责生产数据的模块(可能是方法,对象,线程,进程)消费者:负责处理数据的模块(可能是方法,对象,线程,进程)缓冲区:消费者不能直接使用生产者的数据,它们之间有个缓冲区生产原创 2020-11-26 20:07:42 · 188 阅读 · 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 · 173 阅读 · 2 评论 -
线程同步
一、线程同步由于同一个进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问的冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized,当一个线程获得对象的排他锁,独占资源,其他线程必须等待,使用后释放锁即可,存在以下问题:一个线程持有锁会导致其他所有需要此锁的线程挂起在多线程竞争的情况下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性能问题二、同步方法原创 2020-11-26 16:41:04 · 110 阅读 · 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 · 99 阅读 · 0 评论 -
线程优先级
线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行线程的优先级用数字表示,范围从1~10Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级getPriority setPriority(int xxx)优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了原创 2020-11-26 14:03:41 · 107 阅读 · 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 · 105 阅读 · 0 评论 -
lambda表达式
** 函数式接口的定义:**任何接口如果只包含一个抽象方法,那么它就是一个函数式接口对于函数式接口,我们可以通过lambda表达式来创建该接口的对象*** 为什么要用lambda表达式**避免内部类定义过多可以让你的代码看起来简洁去掉了一堆没有意义的代码,只留下核心的逻辑(params)->expression(表达式)(params)->statement(语句)(params)->{statements}package lambda;/** *..原创 2020-11-24 20:28:51 · 76 阅读 · 1 评论 -
静态代理模式
package proxystatic;/** * 静态代理模式 * 真实对象和代理对象都要实现同一个接口 * 代理对象要代理真实角色 * 好处: * 代理对象可以做很多真实对象做不了的事情 * 真实对象专注做自己的事情 */import java.util.Map;public class StaticProxy { public static void main(String[] args) { WeddingCompany weddi原创 2020-11-24 19:49:08 · 96 阅读 · 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 · 82 阅读 · 1 评论