Skip to content

Instantly share code, notes, and snippets.

@vlas-ilya
Last active October 17, 2024 16:47
Show Gist options
  • Save vlas-ilya/1f1c6b87bf73a8fa9ad6c92a65861b3c to your computer and use it in GitHub Desktop.
Save vlas-ilya/1f1c6b87bf73a8fa9ad6c92a65861b3c to your computer and use it in GitHub Desktop.
Задача на собеседование по синхронизации

Java вариант

Сколько будет выполняться данная программа:

public class Main {  
  
  public static void main(String... args) {  
    Test test = new Test();  
    new Thread(test::a).start();  
    new Thread(test::a).start();  
    new Thread(test::b).start();  
    new Thread(test::b).start();  
  }  
  
  public static void sleep(long millis) {  
    try {  
      Thread.sleep(millis);  
    } catch (InterruptedException e) {  
      throw new RuntimeException(e);  
    }  
  }  
}

Если Test имеет следующую реализацию:

class Test {  
  public synchronized void a() {  
    System.out.println("test a");  
    Main.sleep(10000);  
  }  
  
  public synchronized void b() {  
    System.out.println("test b");  
    Main.sleep(10000);  
  }  
}
class Test { 
  public void a() {  
    System.out.println("test a");  
    Main.sleep(10000);  
  }  
  
  public void b() {  
    System.out.println("test b");  
    Main.sleep(10000);  
  }  
}
class Test {  
  public void a() {  
    synchronized ("test a") {  
      System.out.println("test a");  
      Main.sleep(10000);  
    }  
  }  
  
  public void b() {  
    synchronized ("test b") {  
      System.out.println("test b");  
      Main.sleep(10000);  
    }  
  }  
}
class Test {
  public void a() {  
    synchronized ("test") {  
      System.out.println("test a");  
      Main.sleep(10000);  
    }  
  }  
  
  public void b() {  
    synchronized ("test") {  
      System.out.println("test b");  
      Main.sleep(10000);  
    }  
  }  
}

Kotlin

Сколько будет выполняться данная программа:

fun main() {
    val test = Test()
    Thread { test.a() }.start()
    Thread { test.a() }.start()
    Thread { test.b() }.start()
    Thread { test.b() }.start()
}

Если Test имеет следующую реализацию:

class Test {
    @Synchronized
    fun a() {
        println("test a")
        Thread.sleep(10000)
    }

    @Synchronized
    fun b() {
        println("test b")
        Thread.sleep(10000)
    }
}
class Test {
    fun a() {
        println("test a")
        Thread.sleep(10000)
    }

    fun b() {
        println("test b")
        Thread.sleep(10000)
    }
}
class Test {
    fun a() {
        synchronized("test a") {
            println("test a")
            Thread.sleep(10000)
        }
    }

    fun b() {
        synchronized("test b") {
            println("test b")
            Thread.sleep(10000)
        }
    }
}
class Test {
    fun a() {
        synchronized("test") {
            println("test a")
            Thread.sleep(10000)
        }
    }

    fun b() {
        synchronized("test") {
            println("test b")
            Thread.sleep(10000)
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment