多线程
线程是成程序中的执行线程,Java虚拟机可以允许应用程序执运行多个执行线程,每个线程都可以并行执行不同的任务,每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。
线程的优先级
Java优先级是一个整数,其取值范围是从 1(MIN_PRIORITY-10(MAX_PRIORITY ),默认情况下每个线程都会分配优先级为5(NORM_PRIORITY ),优先级不能保证线程的执行顺序。
线程的创建
- 通过继承Thread 类,子类重写Thread 类的run方法,通过start()方法启动线程。
class domeThread extends Thread {
String name;
public domeThread(String name) {
super(name);
}
@Override
public void run() {
}
}
然后启动线程
domeThread d=new domeThread("线程1");
d.start();
- 实现 Runnable 接口,该类实现run方法,通过创建Thread 作为一个参数传递并启动。
class domeRunnable implements Runnable{
String name;
public domeRunnable(String name) {
this.name=name;
}
@Override
public void run() {
}
}
参数传递并启动
new Thread(new domeRunnable("线程2")).start();
构造方法
- Thread(); 分配一个新的Thread对象
- Thread(Runnable target) ;通过Runnable接口创建一个Thread对象。
- Thread(Runnable target, String name);通过一个Runnable接口和线程名字创建Thread对象。
- Thread(String name) ;通过一个线程名字创建一个Thread对象。
常用方法
方法名 | 说明 |
---|
void run() | 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 | void start() | 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 | void setName(String name) | 改变线程名称,使之与参数 name 相同 | void setPriority(int newPriority) | 更改线程的优先级 | void setDaemon(boolean on) | 将该线程标记为守护线程或者用户线程 | void join(long millis) | 等待该线程终止的时间最长为 millis 毫秒。 | void join(long millis, int nanos) | 等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒 | void interrupt() | 中断线程 | static boolean interrupted() | 测试当前线程是否已经中断 | boolean isAlive() | 测试线程是否处于活动状态 | boolean isDaemon() | 测试线程是否为守护线程 |
静态方法
方法名 | 说明 |
---|
void sleep(long millis) | 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 | static void yield() | 暂停当前正在执行的线程对象,并执行其他线程。 | static Thread currentThread() | 返回对当前正在执行的线程对象的引用。 | static void dumpStack() | 将当前线程的堆栈跟踪打印至标准错误流。 |
示例
- 实现Runable接口,实现run方法。
class domeRunnable implements Runnable{
String name;
public domeRunnable(String name) {
this.name=name;
}
@Override
public void run() {
for(int i=0;i<6;i++) {
try {
System.out.println(this.name+"---"+i);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- 通过domeRunnable对象创建Thread对象。
public class dome2{
public static void main(String[] args){
new Thread(new domeRunnable("线程1")).start();
new Thread(new domeRunnable("线程2")).start();
}
}
结果 线程1—0 线程2—0 线程2—1 线程1—1 线程1—2 线程2—2 线程2—3 线程1—3 线程1—4 线程2—4 线程2—5 线程1—5
|