Java线程使用

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资源。

  • 终止状态: 线程执行完毕或者因为异常退出,该线程的生命周期结束。

Java线程使用


回到多线程目录

上一篇:java多线程核心api以及相关概念(一)


下一篇:Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)