![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
yu&2022
菜鸟程序员
展开
-
生产者消费者问题
生产者消费者问题①管程法源代码:package cn.ecut.pc;//解决方式一:管程法public class TestPC { public static void main(String[] args) { SynContainer container=new SynContainer(); new Producer(container).start(); new Consumer(container).start();原创 2021-03-31 22:36:24 · 144 阅读 · 0 评论 -
Lock锁
Lock锁源代码:package cn.ecut.lock;import java.util.concurrent.locks.ReentrantLock;/* synchronized与Lock的对比 ①Lock是显示锁(手动开启和关闭锁) synchronized是隐式锁,出了作用域自动释放 ②Lock只有代码块锁,synchronized有代码块锁和方法锁 ③使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有原创 2021-03-31 22:35:36 · 85 阅读 · 0 评论 -
死锁
死锁源代码①:package cn.ecut.lock;/* 死锁: 多个资源各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行, 而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,某一个 同步块同时拥有“两个以上对象的锁”时 ,就可能会发生死锁的问题 *///死锁public class DeadLock2 { public static void main(String[] args) {原创 2021-03-31 22:35:02 · 67 阅读 · 0 评论 -
线程同步机制
线程同步机制①例一源代码:package cn.ecut.syn;public class UnsafeBuyTicket { public static void main(String[] args) { ByTicket byTicket=new ByTicket(); new Thread(byTicket,"甲").start(); new Thread(byTicket,"乙").start(); new Thre原创 2021-03-31 22:33:58 · 65 阅读 · 0 评论 -
线程状态
线程状态①线程停止源代码:package cn.ecut.state;/* ①不推荐使用JDK提供的stop()、destroy()方法 (已废弃) ②推荐线程自己停止下来 ③建议使用一个标志位进行变量flag=false,则终止线程运行。 */public class TestStop implements Runnable{ //定义线程停止的标识位 private boolean flag=true; //重写run方原创 2021-03-31 22:32:12 · 69 阅读 · 0 评论 -
Lamda表达式
Lamda表达式package cn.ecut.lambda;public class TestLambda { public static void main(String[] args) { //第一种方法 Like like=new Like(); like.lambda(); //第二种方法:静态内部类 Like2 like2=new Like2(); like2.lambda();原创 2021-03-31 22:28:18 · 130 阅读 · 0 评论 -
静态代理模式
静态代理模式源代码:package cn.ecut.proxy;/* 静态代理模式总结: 1.真实对象和代理对象都要实现同一个接口 2.代理对象要代理真实角色 3.代理对象可以做很多真实对象做不了的事 4.真实对象专注做自己的事 */public class StaticProxy { public static void main(String[] args) { You you=new You(); Wedding原创 2021-03-31 22:27:46 · 62 阅读 · 0 评论 -
模拟龟兔赛跑
模拟龟兔赛跑源代码:package cn.ecut.thread;//模拟龟兔赛跑public class Race implements Runnable{ //定义胜利者 private static String winner; @Override public void run() { //模拟兔子休息 if(Thread.currentThread().getName().equals("兔子")){原创 2021-03-31 22:27:14 · 126 阅读 · 0 评论 -
实现多线程的三种方法
实现多线程的三种方法①继承Thread类例一:源代码:package cn.ecut.thread;//创建线程方法一:继承Thread类,重写run方法,调用start方法开启线程public class TestThread1 extends Thread { //run方法-线程体 @Override public void run() { for (int i = 0; i <10 ; i++) { System.o原创 2021-03-31 22:26:37 · 493 阅读 · 0 评论