建的线程在它的一个完整的生命周期中一般要经历以下的四种状态:html
1.新建: 当一个Thread
类或其子类的对象被声明并建立时,新生的线程对象处于新建状态。java
2.运行 :线程必须调用start()
方法(从父类继承的方法)通知JVM,这样JVM就会知道又有一个新一个线程排队等候切换了。一旦轮到它来享用CPU资源时,此线程的就能够脱离建立它的主线程独立开始本身的生命周期了。git
3.中断:有4种缘由的中断:多线程
JVM将CPU资源从当前线程切换给其余线程,使本线程让出CPU的使用权处于中断状态。学习
线程使用CPU资源期间,执行了sleep(int millsecond)
方法,使当前线程进入休眠状。线程
线程使用CPU资源期间,执行了wait()
方法。设计
线程使用CPU资源期间,执行某个操做进入阻塞状态。调试
4.死亡 :处于死亡状态的线程不具备继续运行的能力。线程释放了实体code
使用Thread建立线程一般使用的构造方法是:htm
Thread(Runnable target)
在建立线程对象时必须向构造方法的参数传递一个实现Runnable接口类的实例,该实例对象称做所创线程的目标对象,当线程调用start()
方法后,一旦轮到它来享用CPU资源,目标对象就会自动调用接口中的run()
方法(接口回调)。
1.start()
: 线程调用该方法将启动线程,使之重新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就能够脱离建立它的线程独立开始本身的生命周期了。
2.run()
: Thread类的run()
方法与Runnable
接口中的run()
方法的功能和做用相同,都用来定义线程对象被调度以后所执行的操做,都是系统自动调用而用户程序不得引用的方法。
3.sleep(int millsecond)
: 优先级高的线程能够在它的run()
方法中调用sleep
方法来使本身放弃CPU资源,休眠一段时间。
4.isAlive()
: 线程处于“新建”状态时,线程调用isAlive()
方法返回false。在线程的run()
方法结束以前,即没有进入死亡状态以前,线程调用isAlive()
方法返回true。
5.currentThread()
:该方法是Thread类中的类方法,能够用类名调用,该方法返回当前正在使用CPU资源的线程。
6.interrupt()
:一个占有CPU资源的线程可让休眠的线程调用
在处理多线程问题时,咱们必须注意这样一个问题:当两个或多个线程同时访问同一个变量,而且一个线程须要修改这个变量。咱们应对这样的问题做出处理。
在处理线程同步时,要作的第一件事就是要把修改数据的方法用关键字synchronized
来修饰。
所谓线程同步就是若干个线程都须要使用一个synchronized
修饰的方法。
一个线程A在占有CPU资源期间,可让其它线程调用join()
和本线程联合,如:
B.join();
教材学习有问题先去https://shimo.im/doc/1i1gldfsojIFH8Ip/看看,若是别人没有提出相同问题,能够编辑文档添加,而后把本身提出的问题复制到下面:
Runnable
于run()
中定义额外流程好?仍是继承Thread
于run()
中定义额外流程好?Runnable
接口的好处就是较有弹性,你的类别还有机会继承其它类别若继承了Thread
,那该类别就是一种Thread
,一般是为了直接利用Thread
中定义的一些方法,才会继承Thread
来实做
若是主线程中启动了额外线程,预设会等待被启动的全部线程都执行完run()
方法才停止JVM。
若是一个Thread
被标示为Daemon线程,在全部的非Daemon
线程都结束时,JVM自动就会终止。
无
A .public boolean isEmpty()若是此映射不包含键-值映射关系,则返回 true。
B .public V get(Object key)返回指定键所映射的值;若是此映射不包含该键的映射关系,则抛出异常。
C .public V put(K key, V value) 在此映射中关联指定值与指定键。若是该映射之前包含了一个该键的映射关系,则以先定义的值为准。
D .public Object clone()返回此 HashMap 实例的浅表副本:并不复制键和值自己。
解析:查询API。B项:若是此映射不包含该键的映射关系,则返回null。C项:若是该映射之前包含了一个该键的映射关系,则旧值被替换。
教材学习中的问题和解决过程, 一个问题加1分
代码调试中的问题和解决过程, 一个问题加1分
基于评分标准,我给本博客打分:XX分。得分状况以下:xxx
xxx
xxx
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 6/6 | 1/1 | 20/20 | |
第二周 | 245/251 | 1/2 | 18/38 | |
第三周 | 633/884 | 1/3 | 22/60 | |
第四周 | 305/1189 | 1/4 | 30/90 | |
第五周 | 410/1599 | 3/7 | 30/120 | |
第六周 | 1135/2734 | 3/10 | 30/150 | |
第七周 | 781/3515 | 3/13 | 30/180 | |
第八周 | 710/4225 | 3/16 | 30/210 | |
第九周 | 775/5000 | 2/18 | 30/240 | |
第十周 | 933/5933 | 1/19 | 30/270 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进本身的计划能力。这个工做学习中很重要,也颇有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
计划学习时间:XX小时
实际学习时间:XX小时
改进状况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)