线程
线程是调度CPU的最小单元,也叫轻量级进程LWP (Light Weight Process)。
两个模型:
- 用户线程(ULT):用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞。
- 内核线程(KLT):系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核完成,效率比ULT要慢,比进程操作快。
线程和进程
多进程:在操作系统中能(同时)运行多个任务(程序)
多线程:在同应用程序中有多 个顺序流(同时)执行
创建线程
方式1 :
- 自定义类继承Thread
- 重写run()方法
- 在run()方法中增加子线程中要做的事情
- 创建自定义线程类对象
- 调用自定义线程类对象的start()方法 (只能调用一次)
由于Java只支持单继承,用这种方法定义的类不能再继承其他类
public class Test {
public static void main(String[] args) {
new Thread() {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("A:" + i);
}
}
}.start();
for (int i = 0; i < 100; i++) {
System.out.println("B:" + i);
}
}
}
线程的框架
方式1代码:
public class MyThread extends Thread {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("A");
}
}
}
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("B");
}
}
}
方式2
- 自定义类实现Runnable接口
- 实现抽象方法run方法
- 在run方法中增加子线程中要做的事情
- 创建自定义线程类对象
- 创建一个 Thread对象, 把自定义线程类对象作为Thread构造 器
- 调用Thread对象的start方法启动线程
方式2代码:
public class MyRunnable implements Runnable {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("A");
}
}
}
public class Test2 {
public static void main(String[] args) {
MyRunnable mr=new MyRunnable();
Thread r=new Thread(mr);
r.start();
}
}