Java教程-如何在Java中创建线程

如何在Java中创建线程
有两种方法可以创建线程:
- 通过扩展Thread类
- 通过实现Runnable接口
Thread类:
Thread类提供了构造函数和方法来创建和执行线程。Thread类继承自Object类并实现了Runnable接口。
Thread类的常用构造函数:
- Thread()
- Thread(String name)
- Thread(Runnable r)
- Thread(Runnable r, String name)
Thread类的常用方法:
- public void run():用于执行线程的操作。
- public void start():启动线程。JVM调用线程的run()方法。
- public void sleep(long milliseconds):使当前正在执行的线程休眠(暂停执行)指定的毫秒数。
- public void join():等待线程死亡。
- public void join(long milliseconds):等待线程死亡,最多等待指定的毫秒数。
- public int getPriority():返回线程的优先级。
- public int setPriority(int priority):更改线程的优先级。
- public String getName():返回线程的名称。
- public void setName(String name):更改线程的名称。
- public Thread currentThread():返回当前正在执行的线程的引用。
- public int getId():返回线程的ID。
- public Thread.State getState():返回线程的状态。
- public boolean isAlive():测试线程是否活动。
- public void yield():使当前正在执行的线程对象暂停并允许其他线程执行。
- public void suspend():挂起线程(已弃用)。
- public void resume():恢复挂起的线程(已弃用)。
- public void stop():停止线程(已弃用)。
- public boolean isDaemon():测试线程是否为守护线程。
- public void setDaemon(boolean b):将线程标记为守护线程或用户线程。
- public void interrupt():中断线程。
- public boolean isInterrupted():测试线程是否已被中断。
- public static boolean interrupted():测试当前线程是否已被中断。
Runnable接口:
任何希望由线程执行的类都应该实现Runnable接口。Runnable接口只有一个名为run()的方法。
- public void run():用于执行线程的操作。
启动线程:
Thread类的start()方法用于启动新创建的线程。它执行以下任务:
- 启动一个新线程(具有新的调用堆栈)。
- 线程从新建状态转移到可运行状态。
- 当线程有机会执行时,它的目标run()方法将运行。
通过扩展Thread类的Java线程示例
文件名:Multi.java
class Multi extends Thread{
public void run(){
System.out.println("thread is running...");
}
public static void main(String args[]){
Multi t1=new Multi();
t1.start();
}
}
输出:
thread is running...
通过实现Runnable接口的Java线程示例
文件名:Multi3.java
class Multi3 implements Runnable{
public void run(){
System.out.println("thread is running...");
}
public static void main(String args[]){
Multi3 m1=new Multi3();
Thread t1 =new Thread(m1); // 使用构造函数 Thread(Runnable r)
t1.start();
}
}
输出:
thread is running...
如果不扩展Thread类,你的类对象将不被视为线程对象。因此,你需要显式地创建Thread类对象。我们将实现了Runnable接口的类的对象传递给Thread类,以便执行该类的run()方法。
使用Thread类:Thread(String Name)
我们可以直接使用Thread类使用上述定义的构造函数生成新的线程。
文件名:MyThread1.java
public class MyThread1
{
// 主要方法
public static void main(String argvs[])
{
// 使用构造函数 Thread(String name) 创建 Thread 类的对象
Thread t= new Thread("My first thread");
// start() 方法将线程移动到活动状态
t.start();
// 通过调用 getName() 方法获取线程名称
String str = t.getName();
System.out.println(str);
}
}
输出:
My first thread
使用Thread类:Thread(Runnable r, String name)
观察以下程序。
文件名:MyThread2.java
public class MyThread2 implements Runnable
{
public void run()
{
System.out.println("Now the thread is running ...");
}
// 主要方法
public static void main(String argvs[])
{
// 创建类 MyThread2 的对象
Runnable r1 = new MyThread2();
// 使用 Thread(Runnable r, String name) 创建类 Thread 的对象
Thread th1 = new Thread(r1, "My new thread");
// start() 方法将线程移动到活动状态
th1.start();
// 通过调用 getName() 方法获取线程名称
String str = th1.getName();
System.out.println(str);
}
}
输出:
My new thread
Now the thread is running ...