![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程
Java多线程的知识点,快速掌握多线程
Mr.Rop
一个菜鸟的进阶之旅
展开
-
线程池案例
代码如下public class TestPool { public static void main(String[] args) { // 1.创建服务,创建线程池 // newFixedThreadPool()线程池的大小 ExecutorService service = Executors.newFixedThreadPool(10); // 执行 service.execute(new MyThrea.原创 2022-02-23 17:23:50 · 81 阅读 · 0 评论 -
生产者消费者
// 测试生产者消费者模型// 生产者,消费者,产品,缓冲区public class TestPC { public static void main(String[] args) { SynContainer synContainer = new SynContainer(); new Producer(synContainer).start(); new Customer(synContainer).start(); }}// 生原创 2022-02-23 14:44:01 · 80 阅读 · 0 评论 -
Lock锁(ReentrantLock)
public class TestReentrantLock{ public static void main(String[] args) { Lock2 lock2 = new Lock2(); new Thread(lock2).start(); new Thread(lock2).start(); new Thread(lock2).start(); }}class Lock2 implements Runnab原创 2022-02-23 13:41:37 · 259 阅读 · 0 评论 -
解决死锁的例子--java
死锁前public class DeadLock { public static void main(String[] args) { MakeUp m1 = new MakeUp(0,"灰姑娘"); MakeUp m2 = new MakeUp(1,"白雪公主"); m1.start(); m2.start(); }}// 口红class Lipstick{}// 镜子class Mirror{}.原创 2022-02-22 22:24:07 · 292 阅读 · 0 评论 -
解决三大不安全案例的方法
解决第15小节中不安全线程的方法不安全买票案例// synchronized 同步方法,锁的是thisprivate synchronized void buy(){ // 判断是否有票 if (ticketNum<=0){ flag = false; return; } // 买票 System.out.println(Thread.currentThread().getName()+"买到了第"+ticketNu.原创 2022-02-22 19:13:55 · 139 阅读 · 0 评论 -
三大不安全案例
队列+锁能解决这个问题不安全买票案例// 可能出现负数public class UnSafeBuyTicket { public static void main(String[] args) { BuyTicket station = new BuyTicket(); new Thread(station,"小明").start(); new Thread(station,"小红").start(); new Thread原创 2022-02-22 10:42:48 · 3374 阅读 · 0 评论 -
守护(Daemon)线程
线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕如:后台记录操作日志,监控内存,垃圾回收等待…// 测试守护线程// 上帝守护你public class TestDaemon { public static void main(String[] args) { God god = new God(); You you = new You(); Thread thread = new Thread(g.原创 2022-02-21 14:50:04 · 503 阅读 · 0 评论 -
线程优先级
代码演示start()调度之前先设置优先级// 测试线程优先级public class TestPriority { public static void main(String[] args) { // 主线程有默认的优先级 System.out.println(Thread.currentThread().getName()+"--->"+Thread.currentThread().getPriority()); //main主线程 .原创 2022-02-20 10:09:37 · 196 阅读 · 2 评论 -
观测线程状态源码
// 观察测试线程的状态public class TestState { public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(()->{ for (int i = 0; i < 5; i++) { try { Thread.sleep(1原创 2022-02-20 09:44:59 · 76 阅读 · 0 评论 -
join方法
代码演示// 测试join方法,想象为插队public class TestJoin implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("vip来了"+i); } } public static void main(String[] args) thr.原创 2022-02-19 14:41:00 · 104 阅读 · 0 评论 -
简述线程礼让
礼让线程,让当前正在执行的线程暂停,但不阻塞;将线程从运行状态转为就绪状态;让cpu重新调度,礼让不一定成功,看cpu心情代码演示// 线程礼让// 礼让不一定成功,看cpu心情public class TestYield { public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"a").start(); .原创 2022-02-19 14:17:28 · 135 阅读 · 0 评论 -
线程休眠_Sleep
sleep(时间)指定当前线程阻塞的毫秒数;sleep存在异常InterruptedException;sleep时间达到后线程进入就绪状态;sleep可以模拟网络延时,倒计时等;每一个对象都有一个锁,sleep不会释放锁。为什么需要网络延时?答:放大问题的发生性模拟倒计时// 模拟倒计时public class TestSleep2 { public static void main(String[] args) throws InterruptedExceptio.原创 2022-02-19 14:01:28 · 87 阅读 · 0 评论 -
线程状态及停止
线程状态线程停止public class TestStop implements Runnable { // 1.设置一个标志位 private boolean flag = true; @Override public void run() { int i = 0; while (flag){ System.out.println("run....Thread"+i++); } }原创 2022-02-16 19:42:48 · 131 阅读 · 2 评论 -
Lamda表达式
/*推导Lambda表达式 */public class TestLambda { // 3.静态内部类 static class Like2 implements ILike{ @Override public void Lambda() { System.out.println("I Like Lambda2"); } } public static void main(String[]原创 2022-02-15 23:17:23 · 214 阅读 · 0 评论 -
静态代理模式
// 静态代理模式/**真实对象和代理对象都要实现同一个接口* 代理对象要代理真实角色* */// 好处:// 代理对象可以做很多真实对象做不了的事情// 真实对象专注做自己的事情public class StaticProxy { public static void main(String[] args) { You you = new You(); you.HappyMarry(); System.out.println("==原创 2022-02-14 22:16:38 · 117 阅读 · 0 评论 -
龟兔赛跑例子
// 模拟龟兔赛跑public class Race implements Runnable { private static String winner; @Override public void run() { for (int i = 0; i <= 1000; i++) { // 模拟兔子睡觉// if (Thread.currentThread().getName().equals("兔子")&am.原创 2022-02-14 22:15:54 · 68 阅读 · 0 评论 -
初识并发问题
初识并发问题// 多个线程同时操作同一个对象// 买火车票的例子// 发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱public class TestThread4 implements Runnable { private int ticketNum = 10; @Override public void run() { while (true){ if (ticketNum <= 0){原创 2022-02-14 22:13:38 · 110 阅读 · 0 评论 -
实现Runnable接口
实现Runnable接口// 创建线程2: 实现Runnable接口,重写run()方法,执行线程需要丢入的runnable接口实现类,调用start()方法。public class TestThread3 implements Runnable { @Override public void run() { for (int i = 0; i < 100; i++) { // run方法线程体 System.out原创 2022-02-14 22:12:32 · 1678 阅读 · 0 评论 -
多线程同步下载网络图片
多线程同步下载网络图片// 练习Thread,实现多线程同步下载网络图片public class TestThread2 extends Thread { private String url; // 网络图片地址 private String name; // 保存网络图片文件名 // 构造器 public TestThread2(String url, String name) { this.url = url; this.name原创 2022-02-14 22:11:46 · 184 阅读 · 0 评论 -
Java多线程基础知识点
1.核心概念线程就是独立的执行路径;在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;main()称之为主线程,为系统的入口,用于执行整个程序;在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的;对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;线程会带来额外的开销,如CPU调度时间,并发控制开销;每个线程在自己的工作内存交互,内存控制不当会造成数据不一致。2.代码演示public c原创 2022-02-14 22:10:10 · 72 阅读 · 2 评论