Java同步和死锁的实例分析 深碍√TFBOYSˉ_ 2022-07-30 20:00 164阅读 0赞 Java线程同步的简单示例 public class SameStep { public static void main(String[] args) { MyThread mt1 = new MyThread(); Thread t1 = new Thread(mt1); Thread t2 = new Thread(mt1); Thread t3 = new Thread(mt1); t1.start(); t2.start(); } } class MyThread implements Runnable { private int ticket = 10; @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i <= 100; i++) { synchronized (this) { if (ticket > 0) System.out.println("ticket = " + (--ticket)); } } } } Java线程死锁的示例 大概的思路:两个线程T1和T2,两把锁L1和L2,现在T1先拿到锁L1,然后sleep()一段时间,我们知道sleep()是不会释放锁资源的。然后如果这段时间线程T2拿到锁L2,也sleep()一段时间的话,那么等到两个线程都醒过来的话,那么将互相等待对方释放锁资源而僵持下去,陷入死锁。mark的作用就是让T1和T2获得不同的锁。 class Dog { public void sys() { System.out.println("如果你给我骨头,我就给你鱼"); } public void get() { System.out.println("我拿到骨头了"); } } class Cat { public void sys() { System.out.println("如果你给我鱼,我就给你骨头"); } public void get() { System.out.println("我拿到鱼了"); } } public class DeadLock implements Runnable { public static Cat cat = new Cat(); public static Dog dog = new Dog(); boolean mark = false; @Override public void run() { // TODO Auto-generated method stub if (mark) { // 当前的Cat说 synchronized (cat) { cat.sys(); // 等待拿鱼 try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (dog) { cat.get(); } } } else { synchronized (dog) { // 当前的Dog说 dog.sys(); // 等待拿骨头 try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } synchronized (cat) { dog.get(); } } } } public static void main(String args[]) { DeadLock d1 = new DeadLock(); DeadLock d2 = new DeadLock(); d1.mark = false; d2.mark = true; Thread t1 = new Thread(d1); Thread t2 = new Thread(d2); t1.start(); t2.start(); } }
相关 Java并发编程:锁竞争和死锁情况实例分析 Java并发编程中,锁竞争和死锁是两个常见的问题。锁竞争指的是多个线程尝试获取同一把锁,而死锁则是指两个或多个线程在等待对方释放锁,导致它们都无法继续执行的情况。下面我将通过一 左手的ㄟ右手/ 2024年11月08日 14:33/ 0 赞/ 5 阅读
相关 Java中的同步锁:死锁和活锁问题实例 在Java中,同步锁是用于控制多个线程对共享资源访问的一种机制,以确保在任何时刻只有一个线程可以访问特定的资源。然而,不当的使用同步锁可能会导致死锁和活锁问题。 ###死锁( 向右看齐/ 2024年11月06日 18:07/ 0 赞/ 3 阅读
相关 Java多线程同步:锁对象和死锁实例 在Java中,多线程同步主要通过以下两种方式实现: 1. 锁对象(Synchronized关键字) ```java // 示例1: 唯一拥有资源的线程 public cla 拼搏现实的明天。/ 2024年10月24日 18:21/ 0 赞/ 32 阅读
相关 Java并发编程:死锁的实例分析 死锁是并发编程中的一种严重问题,它发生在两个或更多进程互相等待对方释放资源时。以下是一个简单的Java死锁实例: ```java // 定义两个线程,它们都需要互斥的资源 迷南。/ 2024年10月06日 20:15/ 0 赞/ 58 阅读
相关 Java多线程同步:死锁、活锁及实例分析 在Java多线程编程中,同步机制是保证线程安全的重要手段。其中,死锁、活锁是两种常见的线程同步问题。 1. 死锁(Deadlock): - 定义:两个或多个线程在执行过 冷不防/ 2024年09月13日 11:00/ 0 赞/ 58 阅读
相关 多线程编程:Java中的同步锁和死锁分析 在Java中,多线程编程涉及多种机制来保证共享资源的正确使用。主要的同步工具包括: 1. 同步锁(synchronized关键字): - `synchronized`可 港控/mmm°/ 2024年09月11日 16:48/ 0 赞/ 58 阅读
相关 Java多线程同步问题:死锁、活锁的实例分析 死锁和活锁是多线程编程中常见的两种状态。 1. 死锁实例: - 描述:当两个或更多的线程在执行过程中,因争夺资源而造成的一种互相等待的现象称为死锁。 - 实例:例 我不是女神ヾ/ 2024年09月10日 15:12/ 0 赞/ 74 阅读
相关 Java同步和死锁的实例分析 Java线程同步的简单示例 public class SameStep { public static void main(String[] arg 深碍√TFBOYSˉ_/ 2022年07月30日 20:00/ 0 赞/ 165 阅读
还没有评论,来说两句吧...