日期: 2022 年 10 月 22 日

16 篇文章

关于String底层使用的是char数组还是byte数组以及一点String面试问题
先上结论:jdk1.8及以前String使用的是char数组,jdk1.9及以后使用的是byte数组。 因为开发人员发现人们使用的字符串值是拉丁字符居多而之前使用的char数组每一个char占用两个字节而拉丁字符只需要一个字节就可以存储,剩下的一个字节就浪费了,造成内存的浪费,gc的更加频繁。因此在jdk9中将String底层的实现改为了byte数…
Thread的生命周期
Thread的生命周期 说明: 1. 生命周期关注两个概念:状态、相应的方法 2. 关注:状态a --> 状态b:哪些方法执行了(回调方法) 某个方法主动调用:状态a --> 状态b 3. 阻塞:临时状态,不可以作为最终状态 死亡:最终状态。
多线程-复习
1. 画图说明线程的生命周期,以及各状态切换使用到的方法等 状态,方法 2. 同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。 synchronized(同步监视器){ //操作共享数据的代码(不能包括多了,也不能包括少了) } 同步监视器:是一个对象,任何一个类的对象都可以充当,多个线程必须要共用同一个监视…
多线程-使用线程池的好处
使用线程池 背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。 好处:  提高响应速度(减少了创建新线程的时间)  降低资源消耗(重复利用线程池中线程,不需要每次都创建)  …
多线程-线程通信:生产者消费者例题
package top.qaqaq.java.P443; /** * 线程通信的应用:经典例题:生产者/消费者问题 * * 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品, * 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员 * 会叫生产者停一下,如果店中有空…
多线程-线程通信的例题、sleep()和wait()的异同
package top.qaqaq.java.P441; /** * 线程通信的例子:使用两个线程打印 1-100。线程1, 线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 * notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒…
多线程-同步机制的课后练习
package top.qaqaq.java.P440; /** * 银行有一个账户。 * 有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。 * * 分析: * 1.是否是多线程问题?是,两个储户线程 * 2.是否有共享数据?有,账户(或账户余额) * 3.是否有线程安全问题?有 * 4.需要考虑如何解决线程安…
多线程-Lock锁方式解决线程安全问题
package top.qaqaq.java.P439; import java.util.concurrent.locks.ReentrantLock; /** * 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增 * * 1. 面试题:synchronized 与 Lock 的异同? * 相同:二者都可以解决线程安全问题 * 不同…
多线程-死锁的问题
package top.qaqaq.java.P438; /** * 演示线程的死锁问题 * * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃, * 都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 * * 2.说明: * 1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续 * 2)我们使用同步时…
多线程-线程安全的单例模式之懒汉式
package top.qaqaq.java.P437; /** * 使用同步机制将单例模式中的懒汉式改写为线程安全的 * * @author RichieZhang * @create 2022-10-21 下午 1:38 */ public class BankTest { } class Bank { private Bank() { } p…
多线程-同步方法处理实现Runnable的线程安全问题
package top.qaqaq.java.P435; /** * 使用同步方法解决实现Runnable接口的线程安全问题 * * 关于同步方法的总结: * 1. 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。 * 2. 非静态的同步方法,同步监视器是:this * 静态的同步方法,同步监视器是:当前类本身 * @author Rich…