认识线程
1. 为什么需要线程
2. 如何理解线程
线程是进程的一部分, 一个pcb结构体描述一个线程, 多个pcb结构体对象(多个线程) 串起来等于一个进程
3. 为什么说线程比进程创建/销毁开销小 ?
4. 进程和线程之间的区别与联系
1. 进程包含线程! 一个进程里面可以有一个线程,也可以有多个线程。
2. 进程在频繁创建和销毁中,开销更高. 而只有第一次创建线程(进程), 才会申请资源, 之后创建线程都不会在申请资源, 因为线程之间资源共享
3. 进程是系统分配资源(内存,文件资源....) 的基本单位。线程是系统调度执行的基本单位(CPU)
4. 进程之间是相互独立的, 一个进程挂了其他进程一般都没事. 但是, 在一个进程内部的多个线程之间, 一个线程挂了,整个进程都挂了
5. 创建线程的写法
1. 创建thread子类, 重写run()方法
查看代码
class MyThread extends Thread {
@Override
public void run() {
// 这里写的代码, 就是该线程要完成的工作
while (true) {
System.out.println("hello thread");
// 让线程主动进入"堵塞状态", 短时间停止去cpu上执行
// 单位 1000 ms (毫秒) => 1 s (秒)
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Test {
public static void main(String[] args) {
// Thread 类表示线程
Thread t = new MyThread();
t.start(); // 创建线程, 在线程中调用run()
while (true) {
System.out.println("hello main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2. 通过Runable接口
查看代码
class MyRunnable implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Test {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
while (true) {
System.out.println("hello main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
两种写法的区别
3. 匿名内部类方式
本质上和方法一是一样的
class test {
public static void main(String[] args) {
Thread t = new Thread() {
@Override
public void run() {
while (true) {
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
while (true) {
System.out.println("hello main");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
标签:Thread,创建,void,线程,进程,sleep,写法,1000 From: https://www.cnblogs.com/xumu7/p/18113937