1.进程:可以简单的理解成一个应用程序 2.线程:多线程环境下,一个进程对应多个线程,我们可以简单的理解一个应用程序执行的线索.每一个线程对应于一个代码片段的执行,多个线程交替的执行独自的代码片段,知道执行完所有的代码片段. 2.线程创建,启动线程 1.继承Thread 通过Thread类的实例调用start(),启动线程,执行线程的run() 2.通过实现Runnable 通过Thread的构造函数传入实现了runable接口的类.然后调用 start(),启动线程,执行线程的run()。
区别:由于继承是单继承,所以通过继承Thread类这种方式不讨适合代码的扩展,一般都选用实现Runnable.
3.后台进程
Java线程分为:用户线程和后台进程,用户进程也叫前台进程,后台进程也可以叫做守护进程或者服务进程. 当我们通过 thread.setDaemon(true);来设置一个线程为后台进程还是前台进程,false的时候就是代表的是用户进程(前台进程),true就是守护进程. 当所有的用户进程都执行完毕的时候,意思就是说JVM中只有后台进程的时候,main执行完就退出JVM JVM exit方法
4.联合进程 Main线程和我们的自定义线程之间交替的执行,如果要改变这种方式 我们可以通过join函数实现 Main线程和自定义线程合并成一个线层,然后把自定义的线程加入进来,目前只有一个线程执行,只有一个线层的时候 我们是顺序的方式执行 所以呢,一直执行自定义线程,执行完后才执行后面的代码.
5.线程之间的调度
在多线程的环境下,每一次执行那个线程我们是不知道的,并且每次只能实行一个线程 线程调度有两种方式:1)协作 2)独占
协作:线程的执行时间完全由我们的线程自己独立的控制,等线程执行完后呢,主动的通知操作系统 执行下一个线程 独占:线程的执行时间完全交给操作系统来处理,并且每次只有有一个线程执行,当线程执行完后 然所有的其他的线程争抢CPU的执行时间,刚刚王的线程有可能再次的获得CPU的执行的时间. Java采用是独占,因为协作单个线程的执行时间不可控制.比如一个线程一直执行下去. Java线程执行的优先级,但是不一定有效.比如优先级高的线程有可能不能被执行,java的线程的优先级完全由操作系统控制.
7.java线程的实现
用户空间级别 A ------------------------------------------------- 内核级别(轻量级别的进程) B
A:所有都在用户空间关键创建,维护,对于操作系统级别B 无法感知.不便于管理 B.所有线程都是用内核进程创建以及管理,这样比较消耗性能.
Java提供了一种混合模式:用户空间级别的线程和轻量级别的进程B有个1对1的映射.一个java线程对应一个轻量级别的进程
8.线程的状态 1)创建 2)启动线程 3)运行线程 4)阻塞 5)死亡
9.线程的安全 就是在多线程的环境下,对于共享变量(公有的变量)的操作,如何 不附加线程安全的控制的话,能产生正确的数据.对于单线程是不会出现线程安全的问题
10。如何避免线程安全 synchronized 代码块 Synchronized 修饰方法;
Synchronized(对象A){ //线程不安全的代码 } 对象A目前可以是所有的对象,一般使用当前对象 Synchronized 可以修饰方法同样实现线程的安全 代码块更加细粒度一些,他只是呢关注有线程安全的局部代码 对于复杂的方法呢 我们修饰Synchronized修饰方法
11.线程之间的通信 Notify nofifyall wait (Object的方法)实现线程之间的通信
12.常见的同步问题 死锁:线程之间相互的拥有对象的资源,然后相互的等待。 活锁:线程1申请资源A,线程2也申请资源A,线程3申请资源A........这样时候线程1释放资源.A 线程3获得资源A,线程4等待资源A,线程3释放资源A,线程4获得资源A,同样的方式进行下去,线程2永远不会获得资源A。 优先级倒置:优先级低的线程先执行. 线程的饥饿:线程 A B C争抢相同的资源,同时 线程A和B之间相互的释放和获得资源 C永远无机会参与.
对于同步的问题:只要写好多线程的代码,会避免以上的情况
13.常用的方法解释. 1.Stop:已经过时 不提倡使用,很容易照成死锁. 2.interrupt():中断正在执行的代码,对于没有执行的代码无意思. 不一定能达到中断线程的效果 比如说,当线程处于sleep,join,wait等方法的时候,线程调用interrupt() 只能中断调用以上三种方法而处于阻塞状态。然后抛出interruptException。 一般结合贡献变量来控制线程的中断. 3.yeild():他可以让一个处于运行时或则运行中的线程停止下来,恢复到就绪的状态 和其他的线程参与CPU时间片的竞争.
4.sleep:让一个线程休眠 把cpu实行时间片给其他的线程 当达到休眠时间 自动恢复执行.
4.isinterrupt():判断当前线程是否被中断
5.isLive():判断当前线程是否是活动状态 java线程_01: java线程_02: java线程_03:
|
行业聚焦 面试交流 职位推荐 开发视频 技术交流 腾讯微博 新浪微博
友情链接:课课家教育 阿里云 鲜果 W3Cfuns前端网 中国企业家 环球企业家 投资界 传媒梦工场 MSN中文网 Android开发者社区 cnbeta 投资中国网 又拍云存储 美通说传播 IT茶馆 网商在线 商业评论网 TechOrange IT时代周刊 3W创新传媒 开源中国社区 二维工坊 Iconfans 推酷 智能电视网 FreeBuf黑客与极客 财经网 DoNews 凤凰财经 新财富 eoe移动开发者社区 i黑马 网易科技 新浪科技 搜狐IT 创业家 创业邦 腾讯财经 福布斯中文网 天下网商 TechWeb 雷锋网 新浪创业 和讯科技 品途O2O 极客公园 艾瑞网 抽屉新热榜 卖家网 人民网通信频道 拉勾网 创新派 简单云主机
手机版|黑名单|守望者 成才网 在线教育 linux 高级程序设计 C/C++ 大数据
( 蜀ICP备14029946号 )
成都守望者科技有限公司 © 2013-2016 All Rights Reserved