Java中的多线程
一.程序、进程与线程
程序:一组指令的有序集合。
进程是:一个应用程序。
线程是:一个进程中的执行场景/执行单元。
二.多线程的优点
一个进程可以启动多个线程。
线程A和线程B,堆内存和方法区内存共享。但是栈内存独立,一个线程一个栈。每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。Java的多线程提高程序的处理效率。
三.多线程的实现
(1)Java直接定义了一个从跟类Object中派生的Thread类。所有从java.lang.Thread类派生的直接子类或间接子类均为线程。构建Thread子类对象的步骤如下:
1.构建Thread子类,重写run( )方法。
2.创建线程对象。
3.线程对象调用start( )方法启动该线程。
public class ThreadTest01 {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
for(int i = 0; i < 100; i++){
System.out.println("主线程--->" + i);
}
}
}
class MyThread extends Thread {
@Override
public void run() {
for(int i = 0; i < 100; i++){
System.out.println("分支线程--->" + i);
}
}
}
(2)构造线程的另一种方法是实现Runnable接口。通常一个类已经扩展了Frame或Applet,由于Java语言的单继承性,这样就不能再继承Thread类。我们就可以用实现Runnable接口来构造线程。
实现Runnable接口构造线程的步骤如下:
1.将需要实现多线程的类声明为实现Runnable接口的类,实现run( )方法,并将线程体放在该方法中。
2.创建一个该类的实例。
3.从该实例创建一个Thread的实例。
4.调用start()方法启动该线程。
public class ThreadTest02 {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
for(int i = 0; i < 100; i++){
System.out.println("主线程--->" + i);
}
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
for(int i = 0; i < 100; i++){
System.out.println("分支线程--->" + i);
}
}
}
四.sleep()方法
让当前线程暂时停止下来,睡眠的时间由指定的毫秒数决定。线程醒来之后返回到就绪状态。指定的时间是线程不会运行的最短时间,不是实际时间。
Thread.sleep()方法,间隔特定的时间,去执行一段特定的代码,每隔多久执行一次。
public class ThreadTest03{
public static void main(String[] args) {
for(int i = 0; i < 10; i++){
System.out.println(Thread.currentThread().getName() + "--->" + i);
// 睡眠1秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}