黑马程序员——Java基础---理解多线程
来源:互联网 发布:财经数据 编辑:程序博客网 时间:2024/06/16 03:43
——— android培训、java培训、期待与您交流! ———
概念
理解多线程,要先知道线程是什么。所谓的线程就是任务,单线程就是一条时间线上只执行一个任务,多线程则是在一条时间线上多任务同时执行。关于线程,还有一个概念叫进程,即从所有要做的任务开始,直到所有任务执行结束,称为一个进程。从理解的角度讲,进程包含着所有线程。
而多线程的秘密在于,多线程其实并非真的让所有线程在cpu上同时分配内存并各自进行运算。一个内核只能同时运行一个任务,那么多线程是怎么做到的?其实多线程只是内核在不断的切换任务执行,比如说一共有a、b、c,3个线程要运行,那么内核就执行一下a,执行一下b,执行一下c,再执行一下b或者其它线程,如此不断切换。而切换的速度太快了,超过了我们能察觉的速度,就好像真的所有的线程都在同时运行一样。
java中的多线程
在java中一个线程在生命周期内会有如下状态:创建、开始、运行或等待运行、结束。
创建线程
最基本的线程类是Thread。
有两种创建线程的方法:
- 继承Thread类并重写run()方法
- 在Thread的构造函数中加入Runnable接口的匿名实现作为参数,在实现中重写Runnable的run()方法
第一种方法是继承Thread类,所以这种方法有一个缺点是不能继承其他类,或者说继承了其他类的子类不能作为线程类。而第二种方法不存在这种问题,所以第二种方法一般使用的更多。
代码
- 继承Thread类并重写run()方法
class MyThread extends Thread{ public void run() { //此处是执行代码 ... }}MyThread mythread = new MyThread();mythread.start();
- 在Thread的构造函数中加入Runnable接口的匿名实现作为参数,在实现中重写Runnable的run()方法。
Thread thread = new Thread(new Runnable(){ public void run() { //此处是执行代码 ... }});thread.start();
启动和关闭线程
在创建线程后,调用线程对象的start()方法即可开始线程。
线程开始后,调用线程对象的stop()方法即可关闭线程。
代码
//启动线程thread.start();//关闭线程thread.stop();
线程的等待状态
从简单的角度理解线程的等待状态:
因为内核只能同时执行一个线程,而实际不止一个线程需要执行,内核需要一个一个切换着执行。所以实际上整体过程是:所有线程等待——内核选中一个线程——执行此线程——此线程等待,所有线程处于等待状态——内核选中一个线程——执行此线程——此线程等待,所有线程处于等待状态……直到线程一个一个地执行完毕,所有线程都结束。所以在内核执行其中一个线程时,其他线程就在等待被切换。
其实在等待中的线程还有两种状态:执行资格和执行权。执行资格就是可以被内核选中、执行,没有执行资格就是不能被内核选中。执行权就是被内核选中,接下来就要执行。
内核对线程的选择是随机的,受优先级等因素的影响。我们可以强制一个执行中的线程进入等待状态,只需要调用该线程对象的sleep()方法。
- sleep()
sleep()方法通过设定时间,在指定时间内该线程处于等待状态,不能被内核选中执行。在指定时间过后,线程依旧处于等待状态,但可以被内核选中执行。
- 黑马程序员——Java基础---理解多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——java基础---多线程
- 黑马程序员——Java基础多线程
- 黑马程序员——Java基础->多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——java基础--多线程
- 黑马程序员——java基础--多线程
- 黑马程序员——Java基础--- 多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——Java基础---多线程
- 黑马程序员——java基础-多线程
- 多核CPU启动流程
- Androidstudio安装图文教程+sdk下载失败问题
- 快速幂教程
- Oracle分析函数
- PHP 如何查看AJAX返回的对象和数组的内容
- 黑马程序员——Java基础---理解多线程
- JUint测试出现的问题
- 大端小端运用
- 游戏中动画的控制原理--插值公式
- 更改U盘图标
- Hbase(nosql)体系结构有基本操作 笔记八
- 值得推荐的C/C++框架和库
- 价值100W的经验分享: 基于JSPatch的iOS应用线上Bug的即时修复方案,附源码.
- tp框架中空操作和空控制器处理方法