![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 82
落花不沾身
这个作者很懒,什么都没留下…
展开
-
多线程 Lock锁
锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先 获得Lock对象。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示加锁,释放锁。Lock是显示锁(手动开启和关闭锁,别忘记关闭锁)synchronized是隐式锁,出了作用域自动释放。使用Lock锁,JVM将花费较少的时间来调度线程,性能更好,并且具有更好的扩张性(提供更多的子类)原创 2023-02-05 17:06:26 · 193 阅读 · 2 评论 -
多线程08 线程优先级,守护线程,线程同步及三大不安全案例
Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行线程的优先级用数字表示,范围从1~10Thread.MIN_PRIORITY = 1;Thread.MAX_PRIORITY = 10;Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级getPriority(). setPriority(int xxx)优先级的设定建议在start()调度前优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调用了,这都是看C原创 2022-12-05 13:09:37 · 213 阅读 · 0 评论 -
多线程07 休眠,礼让,强制
Thread.State.TERMINATED){ //只要线程不中止,就一直输出状态。System.out.println(Thread.currentThread().getName()+"线程启动执行了");System.out.println(Thread.currentThread().getName()+"线程停止执行了");System.out.println("线程停止");System.out.println("线程VIP"+i);原创 2022-11-27 17:51:55 · 139 阅读 · 0 评论 -
多线程06 Lambda表达式
lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹(见示例二中简化二)new Thread (()->System.out.println("多线程学习。//5.匿名内部类,没有类的名称,必须借助接口或者父类。对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。// //1.lambda表示简化。去掉了一堆没有意义的代码,只留下核心的逻辑。// //简化1.参数类型。// //简化2.简化括号。原创 2022-11-15 15:45:48 · 92 阅读 · 0 评论 -
多线程06 Lambda表达式
lambda表达式只能有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹(见示例二中简化二)new Thread (()->System.out.println("多线程学习。//5.匿名内部类,没有类的名称,必须借助接口或者父类。对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。// //1.lambda表示简化。去掉了一堆没有意义的代码,只留下核心的逻辑。// //简化1.参数类型。// //简化2.简化括号。原创 2022-11-15 15:44:08 · 109 阅读 · 0 评论 -
多线程05 静态代理模式
对应于代理模式中即:客户类、代理类 、委托类(被代理类)。为某一个对象(委托类)提供一个代理(代理类),用来控制对这个对象的访问。new Thread(()-> System.out.println("爱")).start();System.out.println("落花要结婚了");//代理对象可以做很多真实对象做不了的事情。//真实对象和代理对象都要实现同一个接口。//真实对象专注做自己的事情。//代理谁-->真实目标角色。//代理对象要代理真实角色。//代理角色,帮助你结婚。//真实角色,你去结婚。原创 2022-11-13 15:10:35 · 107 阅读 · 0 评论 -
多线程使用04 Callable接口
创建执行服务:ExecutorServrce ser = Executors.newFixedThreadPool(1);System.out.println("IO异常,dowmloader方法出现异常");提交执行:Future result1 = ser.submit(t1);System.out.println("下载了文件名为"+name);获取结果:boolean r1 = result1.get()关闭服务:ser.shutdownNow();原创 2022-11-11 18:39:25 · 135 阅读 · 0 评论 -
多线程使用03 龟兔赛跑
System.out.println(Thread.currentThread().getName() + "跑了" + i + "步");if (Thread.currentThread().getName().equals("兔子") && i%10==0){System.out.println("胜利者是 ==>"+wineer);new Thread(race,"兔子").start();new Thread(race,"乌龟").start();//判断比赛是否结束。// 判断是否完成比赛。原创 2022-11-10 16:33:42 · 209 阅读 · 0 评论 -
多线程使用02 Runnable接口
System.out.println(Thread.currentThread().getName()+"拿到了第"+ticketNums--+"张票");//创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法。new Thread(t4,"小明").start();new Thread(t4,"小红").start();new Thread(t4,"小刚").start();//创建线程对象,通过线程对象来开启我们的s线程,代理。原创 2022-11-10 15:30:27 · 111 阅读 · 0 评论 -
多线程使用01 Thread类
System.out.println("IO异常,downloader方法出现问题");System.out.println("我在写代码==="+i);System.out.println("我在听课==="+i);System.out.println("下载了文件名:"+name);创建线程对象,调用start()方法启动线程。//联系Thread,实现多线程同步下载图片。重写run()方法,编写线程执行体。//下载图片线程的执行体。原创 2022-11-09 17:03:12 · 72 阅读 · 0 评论