线程
程序:指硬盘文件中保存的数据+指令的集合;
并发执行:多个进程分时交替运行现象称为并发运行;不是同时运行
操作系统:管理软件的软件(管理程序的程序);
线程:并发执行的方法;
进程:正在运行的程序;
进程与线程的区别:一个进程至少有一个线程;
创建线程:
1)Thread类是线程类,继承重写run方法,启动线程时调用线程start();
2)实现runnable接口,并重写run()方法来定义线程体;
3)使用匿名内部类来创建线程;
Thread的静态方法currentThread方法可以用于获取运行当前代码片段的线程;
Long getId():返回该线程的标识符;
String getName:返回该线程的名称;
Thread.yield():线程运行让出方法; 让出cup时间;
线程优先级: 优先范围:1~10; void setPriority (int priority):设置线程优先级;
最低:Thread.MIN_PRIORITY
最高:Threadf.MAX_PRIORITY
默认:Thread.NORM_PRIORITY
守护线程:void setDaemon(boolean )为true守护线程;
特点:当进程中只剩下守护线程时,所有的守护线程强制终止;
默认线程都是前台线程,前台线程线程结束的时候,java程序才结束;
setDaemon=守护线程=后台线程;
注意:不能胡乱设置后台线程,后台线程可以被提前结束。软件核心逻辑必须在前台线程中。在不明确情况下,
全部线程都使用前台线程;
java启动的时候会创建一个主线程,主线程会调用main方法,主线程时前台线程。 java启动至少会有一个前台线程。
sleep方法: static void sleep(long ms):使当前线程进入堵塞状态;
sleep是线程类的方法,导致此线程短暂执行指定时间,给执行机会给其它线程,但是监控状态依然保持,到时候会自
动回复,调用sleep不会释放对象锁;
wait是object类的方法,对此对象调用wait方法,导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此
对象发出notify方法或(notifyAll) 后本线程才进入对象锁定池准备获得对象锁进入运行状态;
void join():等待当前线程结束;
sleep与join的区别:
sleep:用于两个线程互相等待情况,线程唤醒,继续执行并结束;
join:用在一个线程等待另外一个线程结束以后再继续;一个线程已经结束;
线程同步:synchornized
同步锁:当一个方法被synchronized修饰后,该方法称之为同步锁方法,多个线程不能同时进入方法内部,那么就等
于多个线程要排队执行该方法,避免抢就避免了并发问题。
当在方法上使用synchronized时,锁对象就是当前方法所属对象即this;
同步块:使用synchronized块有效的缩小同步返回可以保证安全的前提下提高效率;
使用同步块若想达到同步效果,需要同步监视器(上锁的对象),对于多个对象而言,要看到的是同一个才行;
静态方法若被synchronized修饰后,所得是当前静态方法所属对象,java中每个类都有一个类对象(class的实例),
JVM在 加载当前类时会创建一个class的实例来描述当前类,由于每一个类都有且只有一个类对象,所以静态方法一定
具有同步效果。
当使用synchronized修饰不同代码片段时,只要多个线程看到的锁对象相同,那么这些代码片段之间就具有了互斥性;