Java多线程和并发是Java语言开发中非常重要的一个部分。Java中的多线程使得程序可以同时执行多个任务,从而提高了程序的性能和效率。
Java的多线程基于线程对象的概念,每个线程对象都有一个独立的执行路径。Java中的线程对象可以通过继承Thread类或实现Runnable接口来创建。一般来说,实现Runnable接口是更好的方法,因为Java不支持多继承,使用Runnable接口可以避免这个问题。
public class MyThread implements Runnable { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { for(int i=0; i<10; i++) { System.out.println(name + " : " + i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class Main { public static void main(String[] args) { Thread t1 = new Thread(new MyThread("Thread 1")); Thread t2 = new Thread(new MyThread("Thread 2")); t1.start(); t2.start(); } }
上述代码是一个使用Runnable接口创建的多线程示例,其中MyThread类是Runnable接口的实现,用于定义线程要执行的代码。在Main类中,我们创建了两个MyThread对象,并将它们分别作为参数传递给Thread类的构造方法中,然后调用start()方法来启动线程执行。
Java中的并发主要是通过同步和锁机制来实现的。在多线程环境下,如果多个线程同时操作同一个共享变量或资源,就会出现竞争条件。为了避免这种情况,Java提供了synchronized关键字和Lock机制来实现线程的同步。
public class Counter { private int count = 0; public synchronized void increment() { count++; } public int getCount() { return count; } } public class Main { public static void main(String[] args) { Counter counter = new Counter(); Thread t1 = new Thread(() ->{ for(int i=0; i<1000; i++) { counter.increment(); } }); Thread t2 = new Thread(() ->{ for(int i=0; i<1000; i++) { counter.increment(); } }); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Count : " + counter.getCount()); } }
上述代码是一个使用synchronized关键字实现的线程同步示例。其中Counter类表示一个计数器对象,increment()方法是计数器加1的方法,在方法上加上synchronized关键字可以保证同一时间只有一个线程在执行该方法。Main类中创建了两个线程分别执行increment()方法,最终输出计数器的值。
Java多线程和并发是Java开发中非常重要的概念,需要理解和掌握。