随笔分类 -  java之多线程

摘要:1.java提供了更强大的线程同步机制 通过显式定义同步锁对象来实现。同步使用lock对象充当。 2.java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。 锁提供了对共享资源的独占访问,每次只能有一个线程,对Lock对象加锁,线程开始访问共享资源 阅读全文
posted @ 2022-05-26 17:17 hollg 阅读(122) 评论(0) 推荐(0)
摘要:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源都停止执行的情形,某一个同步块同时 拥有”两个以上对象的锁“时,就可能发生死锁的问题 //死锁:多个线程互相抱着对方需要的资源,然后形成僵持 public class Main { pub 阅读全文
posted @ 2022-05-11 11:28 hollg 阅读(88) 评论(0) 推荐(0)
摘要:JUC是java的并发包下的内容,里面有一个方法数组:CopyOnWriteArrayList,是线程安全的List import java.util.Scanner; public class Main { public static void main(String[] args) { Copy 阅读全文
posted @ 2022-05-07 10:57 hollg 阅读(32) 评论(0) 推荐(0)
摘要:同步方法:只能锁类本身 由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们只需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法synchronzed方法和synchronized块 同步方法:public synchronzed void m 阅读全文
posted @ 2022-05-07 10:45 hollg 阅读(70) 评论(0) 推荐(0)
摘要://不安全的买票 //线程不安全有负数,出现负1的情况就是没有同步加锁,因为线程都有自己的工作内存,当我们的票只有一张时,三个线程都是看得到的,当其中一个线程把这个票拿到自己的工作内存中购买了,另一个线程也同时把票自己的工作内存购买,但是因为上一个线程已经买了,所以当第二线程购买时票数变为0了,所以 阅读全文
posted @ 2022-05-07 09:44 hollg 阅读(45) 评论(0) 推荐(0)
摘要:线程同步例子: 现实生活中,我们会遇到“同一个资源”,多个人都想使用的问题,比如:食堂打饭,每个人都想吃饭,最天然的解决的办法就是排队,一个个来。 处理多线程问题时,多个线程访问同一个对象(并发问题),并且某些线程还想修改这个对象,这时候我们就需要线程同步,线程同步其实就是一种等待机制,多个需要同时 阅读全文
posted @ 2022-04-29 17:16 hollg 阅读(1069) 评论(0) 推荐(0)
摘要:线程分为用户线程和守护线程 虚拟机必须确保用户线程执行完毕 虚拟机不用等待守护线程执行完毕 如:后台记录操作日志,监控内存,垃圾回收等待 //测试守护线程 //守护你 public class Main { public static void main(String[] args) { God g 阅读全文
posted @ 2022-04-29 17:10 hollg 阅读(70) 评论(0) 推荐(0)
摘要:java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度那个线程来执行 线程的优先级用数字表示,范围从1-10 Thread.MIN_PRIORITY=1 Thread.MAX_PRIORITY=10 Thread.NORM_PRIORITY=5 使用以下 阅读全文
posted @ 2022-04-29 16:12 hollg 阅读(162) 评论(0) 推荐(0)
摘要:如何在线程里定义五个状态 Thread.State:可以去这个类查看线程的状态 线程状态。线程可以处于以下状态之一: NEW 尚未启动的线程处于此状态 RUNNABLE:在java虚拟机中执行的线程处于此状态 WAITING:正在等待另一个线程执行特定动作的线程处于此状态 TIMEO_WAITING 阅读全文
posted @ 2022-04-29 15:45 hollg 阅读(232) 评论(0) 推荐(0)
摘要:jion合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞,可以想象成插队。 //测试join方法 //想象为插队 public class Main implements Runnable{ //线程的方法 public void run(){ for (int i=0;i<100 ;i+ 阅读全文
posted @ 2022-04-29 15:05 hollg 阅读(36) 评论(0) 推荐(0)
摘要:礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,但礼让不一定成功,看CPU //测试礼让线程TextYield //礼让不一定成功,看CPU public class Main { public static void main(String[] arg 阅读全文
posted @ 2022-04-27 15:30 hollg 阅读(151) 评论(0) 推荐(0)
摘要:概述: sleep(时间)指定当前线程阻塞的毫秒数 sleep存在异常InterruptedException; sleep时间达到后线程进入就绪状态 sleep可以模拟网络延时,倒计时等 每一个对象都有一个锁,sleep不释放锁 //模拟网络延时:作用是放到问题的发生性 public class 阅读全文
posted @ 2022-04-26 16:51 hollg 阅读(243) 评论(0) 推荐(0)
摘要:线程方法: setPriority(int bewPriority) 更改线程优先级 static void sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠 void join() 等待该线程终止 static void yield() 暂停当前正在执行的线程对象,并 阅读全文
posted @ 2022-04-26 16:00 hollg 阅读(84) 评论(0) 推荐(0)
摘要:希腊字母表中排序第十一位的字母,英文名称为: lambda 其实质属于涵数编程的概念。 为什么要使用: 为了避免匿名内部类定义过多 可以让你的代码看越来很简洁 去掉一堆没有意义的代码,只留下核心的逻辑 理解Functional lnterface(涵数式接口)是学习java8,lambda表达式的关 阅读全文
posted @ 2022-04-25 17:30 hollg 阅读(312) 评论(0) 推荐(0)
摘要:如: 你:真实角色 写手:代理你,帮你写作业 作业:实现写手接口即可 /*静态代理模式总结: 1.真实对象和代理对象都要实现同一个接口 2.代理对象要代理真实角色,所以代理对象要有一个真实对象类型的属性 好处:代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事情 */ public cl 阅读全文
posted @ 2022-04-25 15:26 hollg 阅读(41) 评论(0) 推荐(0)
摘要:1.实现callable接口,需要返回值类型 2.重写call方法,需要抛出异常 3.创建目标对象 4.创建执行服务:ExecutorService ser=Exectutors.newFixedThreadPool(); 5.提交执行:Future<Boolean> result1=ser.sub 阅读全文
posted @ 2022-04-21 18:31 hollg 阅读(43) 评论(0) 推荐(0)
摘要:1.要有赛道距离,我和终点越来越近 2.判断比赛是否结束 3.打印出胜利者 4.龟兔赛跑开始 5.模拟兔子睡觉 6.龟赢了 package Threads; //模拟龟兔赛跑 public class RunQk implements Runnable { //胜利者 private static 阅读全文
posted @ 2022-04-21 17:53 hollg 阅读(57) 评论(0) 推荐(0)
摘要:package Threads; //实现多个线程,操作同一个实现类 //问题:多个线程同时操作一个资源的情况下,线程不安全了,数据紊乱 public class testRable implements Runnable { //票数 private int ticketNums=100; pub 阅读全文
posted @ 2022-04-21 16:28 hollg 阅读(56) 评论(0) 推荐(0)
摘要:实现步骤 定义实现类,实现Runnable接口 实现run方法,编写线程执行体 创建线程对象,调用start()方法启动线程 package Threads; import java.util.Scanner; //创建线程方式2:实现Runnable接口,重写run方法,执行线程需要丢入runna 阅读全文
posted @ 2022-04-21 15:55 hollg 阅读(56) 评论(0) 推荐(0)
摘要:第一引用IO包:IO包 Commons 针对开发IO流功能的工具类库,网上下载 第二使用FileUtils文件工具,复制URl到文件 IDEA引入架包后不能直接用,需要右键找到Add as Library,把他添加到类库中 package Threads; import org.apache.com 阅读全文
posted @ 2022-04-21 14:31 hollg 阅读(73) 评论(0) 推荐(0)