Simple Deadlock Examples

后端 未结 28 2287
失恋的感觉
失恋的感觉 2020-11-30 16:28

I would like to explain threading deadlocks to newbies. I have seen many examples for deadlocks in the past, some using code and some using illustrations (like the famous 4

28条回答
  •  生来不讨喜
    2020-11-30 17:28

    Deadlock can occur in a situation when a Girl1 is wanting to flirt with Guy2, who is caught by another Girl2, and Girl2 is wanting to flirt with a Guy1 that is caught by Girl1. Since, both girls are waiting for dumping each other, the condition is called deadlock.

    class OuchTheGirls
    {
        public static void main(String[] args)
        {
            final String resource1 = "Guy1";
            final String resource2 = "Guy2";
    
            // Girl1 tries to lock resource1 then resource2
            Thread Girl1 = new Thread(() ->
                                      {
                                          synchronized (resource1)
                                          {
                                              System.out.println("Thread 1: locked Guy1");
    
                                              try { Thread.sleep(100);} catch (Exception e) {}
    
                                              synchronized (resource2)
                                              {
                                                  System.out.println("Thread 1: locked Guy2");
                                              }
                                          }
                                      });
    
            // Girl2 tries to lock Guy2 then Guy1
            Thread Girl2 = new Thread(() ->
                                      {
                                          synchronized (resource2)
                                          {
                                              System.out.println("Thread 2: locked Guy2");
    
                                              try { Thread.sleep(100);} catch (Exception e) {}
    
                                              synchronized (resource1)
                                              {
                                                  System.out.println("Thread 2: locked Guy1");
                                              }
                                          }
                                      });
    
    
            Girl1.start();
            Girl2.start();
        }
    }
    

提交回复
热议问题