基础篇之《线程》
@author :kern
————————————————————————————————————————————————————————————————
一:进程:是一个正在执行的程序。每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个执行单元。
二:线程:是进程中的一个独立的控制单元,线程在控制着进程的执行。一个进程中至少有一个线程。
三:多线程:
3.1 继承Thread类创建线程
方法:①创建一个类继承Thread类。
②复写Thread类的run方法。
③创建子类对象,调用Thread类的start方法,该方法作用是开始线程,调用run方法。
3.2线程的运行状态:
① 创建
② 运行
③ 冻结 有两种情况,一是sleep(时间),时间一到就唤醒了;二是wait(),要被notify()唤醒。
④ 消亡 有两种情况,一是stop(),二是run()方法运行结束后,线程会自动消亡。
⑤ 阻塞 又叫临时状态,即有执行资格但是没有执行权。
3.3 实现Runnable接口创建线程
方法:①创建类然后实现Runnable接口。
②复写Runnable接口的run()方法。
③通过Thread类创建线程对象,
④创建Runnable接口的子类对象,然后将其对象作为实际参数传递给Thread类的构造函数。
⑤调用Thread类的start()方法,开启线程调用run()方法。
3.4 继承和实现的区别:
实现Runnable接口避免了单继承的局限性。Runnable实现的同时还可以继承。
3.5 线程的安全问题:这里就说说线程中我们最常见的问题---执行资格和执行权的问题。
a。问题原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,
另一个线程参与进来执行,导致共享数据的错误。
b。解决方案:对多条线程作为共享数据语句,只能让一个线程都执行完了。在执行的过程中,其他线程不可以参与执行。
同步代码块:synchronized(对象)
{
需要被同步的代码;
}
注:对象可以为任意对象 如:Object obj=new Object(); 对象如同锁,持有锁的可以再同步中执行,
没有持有锁的即使获取cpu的执行权也进不去。
3.5 同步的两种表现形式:
a。同步代码块;见3.4
b。同步函数:直接将synchronized作为修饰符修饰函数。
3.6 锁;a。同步函数用的是哪一个锁呢?
函数需要被对象调用,那么函数都有一个所属对象,就是this。所以同步函数使用的锁是this。
b。如果同步函数被静态修饰,那么使用的锁是什么呢?
静态方法中不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件。
类名。class,该对象的类型是class。所以静态同步方法,使用的锁是该方法所在类的字节码文件,类名。class;
四:线程间通信 :就是多个线程操作同一个资源,单单是操作的动作不同;
4.1 wait(),notify(),notifyAll(),用来操作线程,为什么定义在Object类中?
a。这些方法存在与同步中。
b。使用这些方法时必须要标识所属的同步的锁;
c。锁可以使任意对象,所以任意对象调用的方法一定定义在Object类中。
☆ 也就是说,等待和唤醒必须是同一个锁,而锁可以是任意对象所以可以被任意对象调用的方法定义在Object类中。
4.2 wait(),sleep()有什么区别?
wait()释放资源,释放锁。
sleep()释放资源,不释放锁。
4.3 JDK1.5的特性:提供了多线程升级解决方案。
a。将同步synchronized替换成Lock操作。
b。将Object中的wait,notify,notifyAll替换成condition对象。该对象可以通过Lock锁进行获取。
4.4 停止线程:
a。如何停止线程呢?
·原理:只有一种,run()方法结束。开启多线程运行,运行代码往往是循环结构,只要控制循环语句,就可以让run()方法结束。
·特殊情况:当线程处于停滞状态时,就无法读取标记结束循环语句,那么线程就不会结束,这时需要对冻结进行清除。
强制让线程恢复到运行状态,这样就可以操作标记结束线程。于是Thread类中提供了方法interrupt().
4.5 守护线程:void setDaemon(boolean on) 该方法必须在启动线程前使用。
4.6 join() 等待线程终止:即当A线程运行到B线程的join方法时,那么A线程就会等待,等待B线程全部运行结束再运行。
4.7 优先级;指线程抢到CUP的执行权的频率。默认优先级为5,最高为10;设置优先级setPriority()方法。
-----------------------------------------------------------------------------------------------------
我是一个菜菜菜菜鸟,想飞却怎么也飞不高,寻寻觅觅,寻寻觅觅·····
自学的过程中总结出来的一些关于函数的知识点,我就当一次复习了。
有需要的可以参考一下,如有漏掉的或者不完善的谢谢大家指正。
|