在 Java 中,可以通过继承Thread
类或实现Runnable
接口来创建新线程。以下是两种常见的方法:
继承Thread类:
class MyThread extends Thread {
public void run() {
// 线程要执行的代码
}
}
// 创建并启动新线程
MyThread myThread = new MyThread();
myThread.start();
实现Runnable接口:
class MyRunnable implements Runnable {
public void run() {
// 线程要执行的代码
}
}
// 创建并启动新线程
Thread myThread = new Thread(new MyRunnable());
myThread.start();
无论使用哪种方式,都需要重写run()方法,在其中编写线程要执行的代码逻辑。然后,通过创建线程对象,并调用start()方法来启动线程。
值得注意的是,第二种方法使用了Runnable接口,这样可以更好地支持多重继承和代码复用。因此,推荐使用实现Runnable接口的方式来创建线程。
线程的优先级
在Java中,线程的优先级用来指定线程在竞争CPU资源时的相对重要性。每个线程都有一个默认优先级为5(Thread.NORM_PRIORITY)。线程的优先级范围从1到10,其中1是最低优先级,10是最高优先级。
可以使用setPriority(int priority)方法设置线程的优先级,其中priority参数接受一个整数值,表示新的优先级。注意,虽然可以设置线程的优先级,但并不能保证高优先级的线程一定会在低优先级的线程之前执行,这取决于底层操作系统的调度策略。
以下是一个示例代码,演示了如何设置线程的优先级:
public class PriorityDemo {
public static void main(String[] args) {
Thread thread1 = new MyThread();
Thread thread2 = new MyThread();
// 设置线程1的优先级为最高
thread1.setPriority(Thread.MAX_PRIORITY);
// 设置线程2的优先级为最低
thread2.setPriority(Thread.MIN_PRIORITY);
thread1.start();
thread2.start();
}
static class MyThread extends Thread {
@Override
public void run() {
System.out.println("当前线程:" + Thread.currentThread().getName() + ",优先级:" + Thread.currentThread().getPriority());
}
}
}
运行上述代码,你将看到输出结果类似于:
当前线程:Thread-0,优先级:10
当前线程:Thread-1,优先级:1
在这个例子中,我们创建了两个线程,并分别将它们的优先级设置为最高和最低。然后启动这两个线程,在输出中可以看到线程0的优先级是10(最高),线程1的优先级是1(最低)。
需要注意的是,尽量避免过度依赖线程优先级来控制程序的执行顺序,因为线程优先级可能受到不同操作系统和硬件平台的影响,而且过度使用线程优先级可能导致不可预测的行为。