1.线程是一个程序内部不同的执行路径。
2.main()为主线程。
3.进程是一个静态概念,实际运行的是线程。
4.同一个时间点只能执行一个线程,时间片的分割短。
5.创建新线程的两种方式:
(1)第一种:实现Runnable接口
A:声明实现Runnable接口的类,然后实现run()方法。
B:然后可以分配该类的实例,在创建 Thread
时作为一个参数来传递并启动。
C:Thread th=new Thread(实现Runnable接口类的实例)。
D:Runnbale接口只有一个run()方法,用来定义线程的运行体。
void | run() 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。 |
E:使用该方法可以为多线程提供共享的数据。
F:在该实现方法中,在run()方法中可以使用Thread的静态方法。
G:
|
|
代码如下:
public class TestThread1 {
public static void main(String[] args) {
//实例化实现Runnable接口的类
TestRunner1 tr=new TestRunner1();
// tr.run();
//创建一个线程
Thread myThread=new Thread(tr);
//启动线程执行,调用线程的run()方法
myThread.start();
for(int i=0;i<50;i++){
System.out.println("main thread:"+i);
}
}
}
class TestRunner1 implements Runnable{
public void run(){
for(int i=0;i<50;i++){
System.out.println("child Runnable1:"+i);
}
}
}
从结果可以看出,是交替执行的。
注意:
如果只是 TestRunner1 tr=new TestRunner1();
tr.run();
而不是 创建Thread,
则只是单纯的方法调用,达不到多线程的目的。
(2)第二种方式:继承Thread
A:类声明为 Thread
的子类。
B:该子类应重写 Thread
类的 run
方法。
C:接下来可以分配并启动该子类的实例。
代码如下:
public class TestThread2 {
public static void main(String[] args) {
Test myThread=new Test();
myThread.start();
for(int i=0;i<50;i++){
System.out.println("main thread:"+i);
}
}
}
class Test extends Thread{
public void run(){
for(int i=0;i<50;i++){
System.out.println("child thread:"+i);
}
}
}
由于类的单继承模式,所以推荐实现接口这种方式。
6.线程状态
创建----就绪(start)------运行---终止
创建----就绪----运行---阻塞---就绪--运行--终止
控制方法如下:
static void | sleep(long millis) throws InterruptedException在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 |
InterruptedException
- 如果任何线程中断了当前线程。当抛出该异常时,当前线程的
中断状态 被清除。
void | join() throws InterruptedException等待该线程终止。 |
相当于方法调用。
static void | yield() 暂停当前正在执行的线程对象,并执行其他线程。 |
让出CPU,让其他线程执行。
7.线程优先级
范围:1--10,默认为5.
java.lang.Thread | ||
---|---|---|
public static final int | MAX_PRIORITY | 10 |
public static final int | MIN_PRIORITY | 1 |
public static final int | NORM_PRIORITY | 5 |
Thread的字段摘要
字段摘要 | |
---|---|
static int | MAX_PRIORITY 线程可以具有的最高优先级。 |
static int | MIN_PRIORITY 线程可以具有的最低优先级。 |
static int | NORM_PRIORITY 分配给线程的默认优先级。 |