JAVA多线程—线程死锁

妖狐艹你老母 2024-04-17 22:29 179阅读 0赞

线程死锁:

创建两个字符串a和b,再创建两个线程A和B,让每个线程都用synchronized锁住字符串(A先锁a,再去锁b;B先锁b,再锁a),如果A锁住a,B锁住b,A就没办法锁住b,B也没办法锁住a,这时就陷入了死锁。直接贴代码:

  1. /*
  2. 线程死锁
  3. */
  4. public class DeadLock {
  5. public static String str1 = "str1";
  6. public static String str2 = "str2";
  7. public static void main(String[] args) {
  8. Thread t1 = new Thread(new Lock1());
  9. Thread t2 = new Thread(new Lock2());
  10. t1.start();
  11. t2.start();
  12. }
  13. }
  14. class Lock1 implements Runnable{
  15. @Override
  16. public void run() {
  17. try {
  18. System.out.println("线程"+Thread.currentThread().getName()+"开始运行");
  19. while (true){
  20. synchronized (DeadLock.str1){
  21. System.out.println("线程"+Thread.currentThread().getName()+"锁住str1");
  22. Thread.sleep(3000);
  23. synchronized (DeadLock.str2){
  24. System.out.println("线程"+Thread.currentThread().getName()+"锁住str2");
  25. }
  26. }
  27. }
  28. }catch (Exception e){
  29. e.printStackTrace();
  30. }
  31. }
  32. }
  33. class Lock2 implements Runnable{
  34. @Override
  35. public void run() {
  36. try {
  37. System.out.println("线程"+Thread.currentThread().getName()+"开始运行");
  38. while (true){
  39. synchronized (DeadLock.str2){
  40. System.out.println("线程"+Thread.currentThread().getName()+"锁住str2");
  41. Thread.sleep(3000);
  42. synchronized (DeadLock.str1){
  43. System.out.println("线程"+Thread.currentThread().getName()+"锁住str1");
  44. }
  45. }
  46. }
  47. }catch (Exception e){
  48. e.printStackTrace();
  49. }
  50. }
  51. }

发表评论

表情:
评论列表 (有 0 条评论,179人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线09/线问题

    线程死锁问题 > 死锁 不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁 出现死锁后,不会出现异常,不会出现提示,只

    相关 线

    死锁: 如果一个资源被一个线程占用,而且无法释放线程资源,导致其他线程无法访问这个字段,一直处于等待状态,这样就会形成 线程死锁。 例子: package com.

    相关 线

    / 死锁:二个线程同时锁住一个变量时。 锁住一个变量之后,尽快操作完成解锁,解锁之前不要再锁住其它变量,否则会互锁(死锁)。 /

    相关 线

    峨眉山月半轮秋,影入平羌江水流 Java线程的死锁一直都是经典的多线程问题;因为不同的线程都在等待根本不可能被释放的锁,从而导致所有的任务都不能继续执行; 示例代码:

    相关 线

    同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免就避免掉。