Java中线程的使用
-
第一种使用方法:继承Thread类:
- 创建自定义类并继承Thread
- 重写Thread的run方法,并编写该线程的业务逻辑代码
1.定义好了⼀个线程类之后,我们就可以通过该类来实例化对象,对象就可以描述⼀个线程。
2. 实例化该对象之后,必须通过调⽤start()来开启该线程,这样该线程才会和其他线程来抢占CPU资源,不能调⽤run()⽅法,调⽤run()相当于普通的实例对象⽅法调⽤,并不是多线程。
package thread;
public class MyThread extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i < 1000;i++) {
System.out.println("-------------MyThread-----------");
}
}
}
package thread;
public class Test {
public static void main(String[] args) {
for(int i = 0; i < 1000;i++) {
System.out.println("-----------------Test");
}
MyThread myThread = new MyThread();
myThread.start();
}
}
-
第二种使用方法:实现Runnable接口:
- 创建自定义类并实现Runnable接口
- 实现run方法,编写该线程的业务逻辑代码
MyRunnable的使⽤与MyThread略有不同, MyRunnable相当于定义了线程的业务逻辑,但是它本身不是⼀个线程,所以需要实例化Thread类的对象作为线程,然后将MyRunnable对象赋给Thread对象,这样Thread就拥有了MyRunnable中定义的业务逻辑,再通过调⽤Thread对象的start⽅法来启动线程。
package thread;
public class MyRunnable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0; i < 1000;i++) {
System.out.println("!===Runnable===!");
}
}
}
package thread;
public class Test2 {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
MyThread myThread = new MyThread();
myThread.start();
}
}
线程的状态
线程共有5种状态,在特定的情况下,线程可以在不同的状态之间完成切换,5种状态如下所示。
- 创建状态: 实例化一个新的线程对象,没有启动。
MyThread myThread = new MyThread();
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
- 就绪状态: 线程对象创建好之后,调用该对象的start方法启动线程,该状态下的线程对象位于可运行线程池中,等待系统为其分配CPU资源。
myThread.start();
thread.start();
-
运行状态: 就绪状态的线程在某个时间段内获取到了CPU资源,从而执行程序,完成它的任务。
-
阻塞状态: 运行状态的线程因某些原因暂时放弃CPU资源,停止执行程序,并在解除阻塞之后也不能直接回到运行状态,而是重新回到就绪状态,等待获取CPU资源。
-
终止状态: 线程执行完毕或者因为异常退出,该线程的生命周期结束。