进行并发程序设计,首先必须对多线程有足够的了解。在JAVA语言中,多线程通常通过Thread类和Runnable接口来实现。本文就总结它们的使用。
1、Thread类
在JAVA APIDOCS中,Thread类有这样一段话:
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:
调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。
创建线程时,必须使用该类。该类封装了线程的行为。
Thread类
1.定义类继承Thread
2.重写run()方法
3.在main()方法中调用starat()方法启动线程,会自动调用run()方法
代码:
package com.company.bean11;
public class MyThread1 extends Thread{
@Override
public void run() {
for(int i=0;i<1000;i++){
System.out.println("打游戏---"+i);
}
}
}
package com.company.bean11;
public class Mythread2 extends Thread{
@Override
public void run() {
for(int i=0;i<1000;i++){
System.out.println("听歌---"+i);
}
}
}
package com.company.bean11;
public class ThreadTest {
public static void main(String[] args) {
MyThread1 t1=new MyThread1();
Mythread2 t2=new Mythread2();
t1.start();
t2.start();
}
}
2、Runnable接口
API中的解释是:
Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为 run 的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread 类实现了 Runnable。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。
Runnable接口
1.定义类继承Thread
2.重写run()方法
3.在main()方法中实例化Runnable接口的实例化对象
4.定义两个线程Thread类的对象把Runnable接口的实现对象传入构造方法中
5.线程类对象调用strat()方法启动线程自动执行Runnable接口的实现类中的run()方法
package com.company.bean11;
public class MyRunnable1 extends Thread implements Runnable {
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("听歌---"+i);
}
}
}
package com.company.bean11;
public class MyRunnable2 extends Thread implements Runnable{
@Override
public void run() {
for(int i=0;i<100;i++){
System.out.println("打游戏---"+i);
}
}
}
package com.company.bean11;
public class ThreadTest1 {
public static void main(String[] args) {
MyRunnable1 m1=new MyRunnable1();
MyRunnable2 m2=new MyRunnable2();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
t1.start();
t2.start();
}
}
多线程
一个进程至少有一个线程,也可以有多个线程被称之为多线程
进程指的是应用程序,每一个都有一个内存空间,线程是执行单元
Thread类这种显示机制导致自定义的类没办法在继承别的类
Runnable接口的机制可以让自定义类既可以继承别的类,也可以实现多线程。