主题:
这套文章主要是把书上的内容自己消化一遍,把核心内容跟重点挑出来。读者可以用最少的时间了解这本书的内容。
第一章主要讲解多线程的概念,使用方法,一些基本的api;每小节的内容不超过十句话的总结如下:
层级结构上是:
1.1进程跟多线程的概念;
1.进程可以理解为电脑的exe程序,线程可以理解为进程中单独运行的子任务;
2.多线程可以提高系统cpu使用率,运行效率得到提升
3.多线程是异步的,执行顺序并不是代码的顺序
1.2如何使用多线程;
1.继承Thread类,实现Runable接口;如MyThread extends Thread; Myrunalble implements Runable
2.Thread类本身也实现了runable接口
3.start方法通知“”线程规划器“已经准备就绪,等待调用run方法,直接调run的话就是事实启动不是异步的了。
4.Thread的构造函数可以传入Runable接口,如Thread a = new Thread(new Runable());
5.变量实例分为共享和不共享之分,共享变更可能因为线程同步的问题出现数据上的差异,要使用synchronized关键字;
6.printIn()方法中,虽然这个方法是同步的,但是i--的操作是在printIn()之前发生。所以有非线程安全问题的概率。
1.3currentThread方法
1.Thread.currentThread().getName();
2.this.getTime()
1.4isAlive方法
1.活动状态是指线程已经启动并且尚未终止,线程处于正在运行或者准备开始运行的状态,此时会认为线程是存活的。
2.Mythread.isAlive();
1.5sleep方法
1.让当前线程休眠(暂停执行)
1.6getID方法
1.获取线程的唯一标识
1.7停止线程
1.处理完任务之前停止正在做的操作。
2.使用stop可以立即停止,但是不赞成使用(不安全);更推荐使用Thread.interrupt;此方法不会终止一个正在运行的线程,要加上判断才能停止。
3.interrupt只是在线程中打了一个停止的标记。并不会真的停止。
4.this.interrupted();测试当前线程是否已经中断。会清除状态。this.isInterrupted();测试线程thread是否已经中断
5.推荐终止线程的方法。this.interrupted()。手动创建异常后面用异常捕获。
6.如果在sleep状态下停止线程,会进入异常
7.stop方法不推荐使用是因为线程停止可能会导致一些清理工作得不到完成,可能会锁定的对象进行了解锁,出现数据不一致的问题。
1.8暂停线程
1.可以使用suspend暂停线程,resume恢复线程执行。
2.如果加了sync关键字,暂停线程后没有恢复,可能导致公共资源无法访问。没加关键字,暂停之后可能出现数据不一致
1.9yield方法
1.放弃当前的cpu资源,让其他的任务去占用cpu;
2.Thread.yield();
1.10线程的优先级
1.设置线程可以使用setPriority(),在java中,线程分了1-10个等级。
2.优先级是可以继承的。如果是a线程启动的b线程,那b的线程与a的线程优先级一样的。
3.cpu会把资源让给优先级比较高的线程
4优先级有随机性,优先级高的不一定每一次都先执行完。
1.11守护线程
1.线程分两种,一种是用户线程,一种是守护线程。
2.守护线程守护一个非守护线程,当不存在非守护线程了,守护线程字段销毁
3。典型的守护线程如垃圾回收线程。
总结:
主要学习线程的api