一篇文章带你入门Java多线程
前言
Java多线程是Java语言的一个非常重要的特性,它可以让我们更好地利用计算机多核的优势,加快程序的运行效率。本文将带你了解Java多线程的基本概念和应用,让你迈出入门的第一步。
Java多线程的基本概念
线程
Java线程是程序中执行的最小单元,一个程序可以有多个线程同时执行。Java线程通过Java.lang.Thread类来实现,创建线程的方式有两种:
- 继承Thread类,在子类中重写run()方法。
- 实现Runnable接口,并将其作为参数传递给Thread类的构造函数。
以下是两种方式的示例代码:
// 方式一:继承Thread类
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程启动了");
}
}
MyThread myThread = new MyThread();
myThread.start();
// 方式二:实现Runnable接口
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("线程启动了");
}
}
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
同步和异步
同步和异步是指线程之间的执行方式。同步是指多个线程按照一定的规则协调执行,比如使用synchronized关键字控制线程的并发访问。而异步是指多个线程并发执行,相互之间不会有任何协调。
线程安全
线程安全是指在多线程环境下,对共享数据进行访问时保证数据正确的能力。线程不安全的情况下,多个线程同时访问共享数据可能会导致数据的不一致、丢失或者死锁等问题。
Java多线程的应用
使用synchronized关键字实现线程同步
使用synchronized关键字可以使代码块或者方法在同一时刻只能被一个线程执行。以下是使用synchronized关键字实现线程同步的示例代码:
public class SynchronizedDemo {
private int count;
public synchronized void increase() {
count++;
}
public synchronized int getCount() {
return count;
}
}
// 创建两个线程,对共享变量进行操作
SynchronizedDemo demo = new SynchronizedDemo();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increase();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increase();
}
});
thread1.start();
thread2.start();
// 等待两个线程执行完成
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(demo.getCount());
使用ReentrantLock实现线程同步
ReentrantLock是JDK提供的一个基于锁的同步工具,与synchronized关键字相比,它具有可重入性和公平性的特点。以下是使用ReentrantLock实现线程同步的示例代码:
public class ReentrantLockDemo {
private int count;
private ReentrantLock lock = new ReentrantLock();
public void increase() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}
// 创建两个线程,对共享变量进行操作
ReentrantLockDemo demo = new ReentrantLockDemo();
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increase();
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 10000; i++) {
demo.increase();
}
});
thread1.start();
thread2.start();
// 等待两个线程执行完成
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(demo.getCount());
总结
Java多线程是Java开发中的一个重要特性,掌握Java多线程的基本概念和应用是非常必要的。本文通过对Java线程、同步和异步、线程安全等概念进行详细讲解,同时通过两个示例代码,展示了使用synchronized关键字和ReentrantLock实现线程同步的方法。希望本文对你入门Java多线程有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你入门java多线程 - Python技术站