一、线程是什么?
二、进程和线程的区别
三、多线程的优势/好处?(使用场景)
缺陷/注意事项:
四、线程的状态:
五、创建线程的方法
方法一、继承Thread类
方法二、实现Runnable接口
六、Thread和Runnable的区别和联系?
一、线程是什么?线程的实现方式有多种:
- 内核线程:Java中的线程,是基于内核线程的轻量级实现(轻量级进程)
- 用户线程:有程序自己来实现线程,包括线程的调度等。
- 多个进程的内存是隔离开的,一个进程中的多个线程,可以共享内存(进程包含线程)
- 进程是系统分配资源的最小单位;线程是系统调度cpu执行的最小单位
- 线程的创建,销毁代价比进程小,状态转换进程的开销大于线程
- 线程有bug可能会造成整个进程挂断,进程间是独立运行的(可能存在进程通信)
缺陷/注意事项:
- 充分利用cpu资源,提高执行效率
- io等阻塞时(如果希望能同时接收输入)
- 线程的创建/销毁也是具有一定系统开销:所以一般用于执行耗时比较长的任务
- 增加编码的复杂程度
五、创建线程的方法 方法一、继承Thread类
- New:创建态
- Runnable: 可运行态(程序无法判断某个时间时就绪还是运行态)
- Waiting: 等待,调用wait方法会进入该状态
- Timed_Waiting: 超时等待
- Blocked: 阻塞
- Terminated: 工作全部完成之后,会处于这个状态
public static void main(String[] args) {
//创建一个线程
My my = new My();
my.start();
}
//继承的方法:继承Thread,重写run方法
public static class My extends Thread {
@Override
public void run() {
System.out.println("我的run方法");
}
}
使用一个匿名内部类,属于继承Thread但没有名称的类
public static void main(String[] args) {
//使用一个匿名内部类
Thread t=new Thread(){//属于继承Thread但没有名称的类
@Override
public void run() {
System.out.println("匿名内部类");
}
};
t.start();
}
方法二、实现Runnable接口
private static class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("我的run");
}
}
public static void main(String[] args) {
//实现Runnable写法1
Thread t = new Thread(new MyRunnable());
t.start();
}
重写Runnable的run方法
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名run");
}
});
t2.start();
}
方法三、实现Callable接口
六、Thread和Runnable的区别和联系?
Thread 类描述了一个线程;Runnable 描述了一个任务.在创建线程的时候需要指定线程完成的任务, 可以直接重写 Thread 的 run 方法, 也可以使用 Runnable 来描述这个任务.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)