1.如果程序只有一条执行路径,那么该程序就是单线程程序。
如果程序多条执行路径,那么该程序就是多线程程序。
2.线程是依赖进程而存在的。
而进程就是正在运行的程序。是系统进行资源分配和调度的独立单位。每一个进程都有他的内存空间和系统资源。
3.单进程的计算机只能做一件事情:dos命令窗口 现在的计算机可以做多件事情。支持多进程,并且可以提高CPU的使用率。
4.线程就是在一个进程内可以执行多个任务,每一个任务就是一个线程
线程是程序的执行单元,执行路径,是程序使用CPU的最基本单位。
5.多线程的存在,不是提高程序的执行速度,是提高应用程序的使用率 ,线程是的执行是随机的
6.并发:物理上同时发生,某一个时间点同时运行多个程序
并行:逻辑上同时发生,某一个时间内同时运行多个程序
7.Java程序的运行原理:·
由Java命令启动JVM,JVM启动相当于启动了一个进程。然后该进程创建了一个主线程去调用main方法
JVM虚拟机的启动时多线程的,因为还有启动垃圾回收线程, 否则会出现内存溢出。
8.面试题:run和start方法的区别:
run方法:仅仅是封装被线程执行的代码,直接调用是普通方法
start方法:首先是启动了线程 ,然后再由JVM去调用该线程的run()方法
9.IllegalThreadState Exception:非法线程状态异常
说明同一个线程不能被调用两次。
10.获取线程的名称:对象名.getname(); 设置线程的名称:对象名.setname();
获取main方法所在线程对象的名称(不是Thread子类线程的名称):Thread.currentThread.getname();
11.获取默认优先级:对象名。getPriority();默认优先级是5。
12.设置优先级:对象名。setPriority(int newPriority);如果int类型给的不在MIN-Priority(1)或者MAX-Priority(10)之间,
会报 illegal ArgumentException 错误,意思是传入了一个不合法或者不正确的的参数值.
注意:由于线程具有随机性,运行一两次看不出来结果,一定要多运行几次。
13.(1)守护线程:对象名。setDaemon(boolean on)该方法在启动线程前调用。
(2)加入线程:对象名。setJoin()想让那个线程先执行,就在启动线程的后面加入这个方法,并且会try、catch。
(3)开启线程:对象名。Start()
(4)中断线程:对象名。Stop()已经过时,不建议用
:对象名。interrupt(),它会走tay,catch报出异常,而且不影响后面代码的执行
14.同步的问题:
前提:(1)多个线程(2)使用的是同一个锁对象(任意对象,随便创造一个)
好处:解决了多线程的安全问题
弊端:当线程相当多的时候,因为每个线程都会判断同步上的锁,很耗费资源,无形中会降低程序的运行效率。
15.同步解决线程安全问题
A。同步代码块
synchronized(对象){
需要被同步的代码
}任意对象,随便创造一个
B。同步方法
把同步加在方法上
这里的锁对象是 this
C。静态同步方法
把同步加在方法上
这里的锁对象是 当前类的字节码文件对象(类名。class)
16.有关线程安全的类
(1)StringBuffer(2)Vector(3)Hashtable
如何把一个线程不安全的集合类变成一个线程安全的集合类
用 Collections工具类的方法