![](https://img-blog.csdnimg.cn/20201014124006710.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程学习
多线程处理问题
计忆芳华
一个2017年入坑的java小白。
个人博客:jiyifh.top。
展开
-
多线程 死锁的产生以及解决方案
当业务比较复杂,多线程应用里有可能会发生死锁死锁产生的原因线程1 首先占有对象1,接着试图占有对象2线程2 首先占有对象2,接着试图占有对象1线程1 等待线程2释放对象2与此同时,线程2等待线程1释放对象1就会。。。一直等待下去,直到永远循环下去。代码演示形成死锁package multiplethread;import charactor.Hero;public class TestThread5 { public static void main(String[] .原创 2020-06-30 11:56:35 · 1151 阅读 · 3 评论 -
多线程 LOCK对象同步解决死锁
与synchronized类似的,lock也能够达到同步的效果,在说LOCK对象时,先来说一下synchronized 同步的方式。synchronized 同步的方式首先说一下synchronized 同步对象的方式当一个线程占用 synchronized 同步对象,其他线程就不能占用了,直到释放这个同步对象为止package multiplethread;import java.text.SimpleDateFormat;import java.util.Date;public cl.原创 2020-06-30 11:54:56 · 550 阅读 · 0 评论 -
多线程 自己开发一个线程池
每一个线程的启动和结束都是比较消耗时间和占用资源的。如果在系统中用到了很多的线程,大量的启动和结束动作会导致系统的性能变卡,响应变慢。为了解决这个问题,引入线程池这种设计思想。线程池的模式很像生产者消费者模式,消费的对象是一个一个的能够运行的任务线程池的思路和生产者消费者模型是很接近的。准备一个任务容器一次性启动10个 消费者线程刚开始任务容器是空的,所以线程都wait在上面。直到一个外部线程往这个任务容器中扔了一个“任务”,就会有一个消费者线程被唤醒notify这个消费者线程取出“.原创 2020-06-30 09:35:32 · 275 阅读 · 0 评论 -
多线程 使用wait和notify进行线程交互
线程之间有交互通知的需求,考虑如下情况:有两个线程,处理同一个英雄。一个加血,一个减血。减血的线程,发现血量=1,就停止减血,直到加血的线程为英雄加了血,才可以继续减血不使用wait和notify的解决方式故意设计减血线程频率更高,盖伦的血量迟早会到达1减血线程中使用while循环判断是否是1,如果是1就不停的循环,直到加血线程回复了血量这是不好的解决方式,因为会大量占用CPU,拖慢性能package charactor;public class Hero{ public St.原创 2020-06-29 15:02:24 · 457 阅读 · 0 评论 -
多线程 面试会问到的线程安全类
1. HashMap和Hashtable的区别HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式区别1:HashMap可以存放 null,Hashtable不能存放null区别2:HashMap不是线程安全的类,Hashtable是线程安全的类2. StringBuffer和StringBuilder的区别StringBuffer 是线程安全的,StringBuilder 是非线程安全的所以当进行大量字符串拼接操作的时候,如果是单线程就用StringBuilde原创 2020-06-28 15:41:32 · 639 阅读 · 0 评论 -
多线程 synchronized 同步解决脏数据问题
多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问题多线程的问题,又叫Concurrency 问题演示Concurrency 问题假设盖伦有10000滴血,并且在基地里,同时又被对方多个英雄攻击,就是有多个线程在减少盖伦的hp,同时又有多个线程在恢复盖伦的hp,假设线程的数量是一样的,并且每次改变的值都是1,那么所有线程结束后,盖伦应该还是10000滴血。我们编一下运行试一下:package charactor;public class Hero{ public S.原创 2020-06-28 14:54:40 · 574 阅读 · 0 评论 -
多线程 java编写穷举法破解字符串密码
生成一个长度是3的随机字符串,把这个字符串当作 密码创建一个破解线程,使用穷举法,匹配这个密码创建一个日志线程,打印都用过哪些字符串去匹配,这个日志线程设计为守护线程提示: 破解线程把穷举法生成的可能密码放在一个容器中,日志线程不断的从这个容器中拿出可能密码,并打印出来。 如果发现容器是空的,就休息1秒,如果发现不是空的,就不停的取出,并打印。解题代码:穷举密码的线程package multiplethread;import java.util.List;public class P..原创 2020-06-27 22:23:06 · 1327 阅读 · 7 评论 -
多线程 常见的线程方法
sleep()线程暂停Thread.sleep(1000); 表示当前线程暂停1000毫秒 ,其他线程不受影响Thread.sleep(1000); 会抛出InterruptedException 中断异常,因为当前线程sleep的时候,有可能被停止,这时就会抛出 InterruptedExceptionpackage multiplethread;public class TestThread { public static void main(String[] args) {原创 2020-06-27 19:36:56 · 359 阅读 · 0 评论 -
多线程 三种创建方式及区别
多线程的执行的功能都应该在run()方法中进行定义。但是run()方法是不能直接被调用的,这里涉及到操作系统的资源调度问题。要想要启动多线程必须使用start()方法完成(public void start()).虽然调用的是start()方法,但是最终执行的是run()方法,并且所有的线程是交替执行的。在JAVA执行过程之中考虑到对于不同层次的开发者的需求,所以其支持有本地的操作系统函数调用,而这项技术就被称为JNI(java本地接口)技术。利用这项技术可以使用一些操作系统提供的底层函数进行一些特殊.原创 2020-06-04 21:17:02 · 1469 阅读 · 0 评论 -
多线程 实现同步文件查找(单线程,多线程,线程池三种方案查询时间对比)
用java实现文件查找,我们用多线程与单线程实现,对比一下使用多线程的区别单线程假设你的项目目录是 e:/project,遍历这个目录下所有的java文件(包括子文件夹),找出文件内容包括 Magic的那些文件,并打印出来。{ /** * @param file 查找的目录 * @param search 查找的字符串 */ public static void search(File file, String search) { .原创 2020-06-27 10:39:46 · 772 阅读 · 0 评论