33. 自定义线程
Posted 江小白谢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了33. 自定义线程相关的知识,希望对你有一定的参考价值。
1.进程
定义:正在进行的程序叫作一个进程。进程负责了内存空间的划分
疑问:windows号称是多任务的操作系统,那么是同时运行多个程序的吗?
从宏观角度:windows确实是同时运行多个应用程序
从微观角度:cpu做了快速的切换动作,只是太快了,我们肉眼看不出切换而已
2.线程
定义:线程在一个进程中负责了代码的执行,就是一个进程的路径
3.多线程
定义:在一个进程中有多个线程在执行不同的代码。
疑问:按照上面的定义,那我们之前的程序为什么可以执行了?
原来当我们运行程序的时候jvm会创建一个main线程执行main方法中的代码
注意:一个java中至少有2个线程,一个是mian线程,一个执行垃圾回收器
多线程的好处:
1. 解决了一个进程执行多个任务的难题
2. 提高了资源的利用率(而不是提高了效率)
多线程的坏处:
1.增加了cpu的负担
2.降低了一个线程的执行率
3.引出了线程安全问提
4.出现了死锁现象
4.创建线程
方式一:
1.自定义一个类继承Thread类
2.重写run方法
疑问:为什么我们要重写父类的run方法呢?(run方法就是线程要执行的代码)
原来每一个线程都有自己的任务代码,比如main线程就执行main方法里面的代码,
而我们定义的线程,当然要执行自己的任务代码,所以我们就把任务代码写在run方法里面
3.创建Thread线程的子类对象并调用start方法
疑问:为什么我们要调用start方法才能开启自定义的线程呢?我并没有定义start方法啊?
原来,我们用子对象调用start方法,其实是调用Thread类的start方法,并且让start的方法调用run方法
注意:不要直接调用run方法,如果直接调用run方法,那么就相当于调用了一个普通的方法,并没开启线程
下面是一个线程的Demo,可以看出来cpu是在主线程和自定义线程中切换执行的。
class sonThread extends Thread{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("我是自定义线程"); } } } public class Demo3 { public static void main(String[] args) { sonThread sonthread = new sonThread(); sonthread.start(); for (int i = 0; i < 100; i++) { System.out.println("我是main线程"); } } }
5.线程的生命周期
以上是关于33. 自定义线程的主要内容,如果未能解决你的问题,请参考以下文章