以下代码显示了如何在程序中运行多线程。 public class Main { public static void main(String[] args) { // Create two Thread objects Thread t1 = new Thread(Main::print); Thread t2 = new Thread(Main::print);
// Start both threads t1.start(); t2.start(); }
public static void print() { for (int i = 1; i <= 500; i++) { System.out.println(i); } } }
上面的代码生成以下结果。 线程同步Java编程语言内置了两种线程同步: 在互斥同步中,在一个时间点只允许一个线程访问代码段。 条件同步通过条件变量和三个操作来实现:等待,信号和广播。
同步关键字synchronized关键字用于声明需要同步的关键部分。 有两种方法可以使用synchronized关键字:
我们可以通过在方法的返回类型之前使用关键字synchronized来声明一个方法作为临界段。 public class Main { public synchronized void someMethod_1() { // Method code goes here }
public static synchronized void someMethod_2() { // Method code goes here } }
我们可以声明一个实例方法和一个静态方法同步。构造函数不能声明为同步。 以下代码说明了使用关键字synchronized: public class Main { public synchronized void someMethod_1() { // only one thread can execute here at a time }
public void someMethod_11() { synchronized (this) { // only one thread can execute here at a time } }
public void someMethod_12() { // multiple threads can execute here at a time synchronized (this) { // only one thread can execute here at a time } // multiple threads can execute here at a time }
public static synchronized void someMethod_2() { // only one thread can execute here at a time }
public static void someMethod_21() { synchronized (Main.class) { // only one thread can execute here at a time } }
public static void someMethod_22() { // multiple threads can execute here at a time synchronized (Main.class) { // only one thread can execute here at a time } // multiple threads can execute here at a time } }
|