![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
文章平均质量分 59
Alchemy_Ding
Java菜鸟找工作
展开
-
Java并发编程——(9)线程池
十六、线程池 1.线程池概述 (1)背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 (2)思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 (3)优点: 1.提高响应速度(减少了创建新线程的时间); 2.降低资源消耗((重复利用线程池中线程,不需要每次都创建); 3.便于线程管理。 corePoolSize:核心池的大小 maximumPoolSize:最大线程数 keepAliveTim原创 2021-08-14 14:14:14 · 62 阅读 · 0 评论 -
Java并发编程——(8)线程协作(生产者消费者问题)
14、Lock(锁) 1.从JDK5开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当; 2.java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock加锁,线程开始访问共享资源之前应先获得Lock对象; 3.ReentrantLock实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是Reen原创 2021-08-14 13:45:15 · 119 阅读 · 0 评论 -
Java并发编程——(1)线程简介+线程创建(Thread、Runnable、Callable)
一、线程简介 1.程序、进程、线程 在操作系统中运行的程序就是进程(Process),比如:QQ、腾讯视频、网易云音乐等。进程是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。 一个进程可以有多个线程(Thread),比如:视频可以听声音,看弹幕,看图像等。 通常在一个进程中可以包含若干个线程,一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的单位。 二、线程创建(Thread、Runnable、Callable) 1.创建方式 1.Thread class:继承Thr原创 2021-08-12 23:51:09 · 63 阅读 · 0 评论 -
Java并发编程——(2)静态代理模式+Lambda表达式
三、静态代理模式 Thread类实际上也是实现了Runnable接口,本质都是实现了Runnable接口中run方法的重写。Runnable接口使用了静态代理模式 我们在使用Runnable接口实现多线程的时候启动必须借助Thread类对象,我们将这个Thread对象称之为代理对象,这个代理实际上是静态代理(装饰模式) 下面以Marry的例子说明静态代理模式 /* * 静态代理模式 * 真实对象和代理对象都要实现同一个接口 * 代理对象要代理真实角色 * 优点: * 代理对象可以做很多真实对象做不原创 2021-08-13 01:14:42 · 120 阅读 · 0 评论 -
Java并发编程——(3)线程状态+线程方法(stop、sleep、yield、join)
五、线程状态 1.线程状态图 (1)新建(new):新创建了一个线程对象。 (2)就绪(可运行状态)(runnable):线程对象创建后,当调用线程对象的 start()方法,该线程处于就绪状态,等待被线程调度选中,获取cpu的使用权。 (3)运行(running):可运行状态(runnable)的线程获得了cpu时间(timeslice),执行程序代码。 注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中; (4)阻塞(block):处于运行状态中的线程由原创 2021-08-13 15:32:26 · 158 阅读 · 0 评论 -
Java并发编程——(4)观测线程状态+线程优先级
七、观测线程状态 //观察测试线程的状态 public class TestState { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedExcep原创 2021-08-13 19:10:18 · 96 阅读 · 0 评论 -
Java并发编程——(5)守护线程+线程同步
九、守护线程 1.线程分为守护线程和用户线程 2.虚拟机必须确保用户线程执行完毕 3.虚拟机不用等待守护线程执行完毕 4.守护线程如:操作日志,监控内存,垃圾回收等 //守护线程 public class TestDaemon { public static void main(String[] args) { God god = new God(); He he = new He(); Thread thread = new Thread(god); thread.setDaemon(t原创 2021-08-13 22:05:17 · 69 阅读 · 0 评论 -
Java并发编程——(6)同步方法和同步块+CopyOnWriteArrayList
十一、同步方法和同步块 1.同步方法 (1)由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,他包括两种用法: synchronized方法和synchronized块 同步方法:public synchronized void method(int args){} (2)synchronized方法控制对"对象"的访问,每个对象对应一把锁,每个synchronized方法都必须获得调用方法的对象的锁才能执行,否原创 2021-08-13 22:49:37 · 60 阅读 · 0 评论 -
Java并发编程——(7)死锁+Lock(锁)
十三、死锁 多个线程各自占有一定资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对象释放资源,都停止执行的情形。某个同步块同时拥有"两个以上对象的锁"时,就可能发生"死锁"的问题。 1.死锁举例 下面是死锁的情况: //死锁:多个线程互相抱着对需要的资源,然后形成僵持 public class DeadLock { public static void main(String[] args) { Makeup g1=new Makeup(0, "灰姑娘"); Make原创 2021-08-14 00:15:00 · 121 阅读 · 0 评论