java基础<线程>总结(线程概念、线程创建方式、线程间通信、线程重要方法)

来源:互联网 发布:友鼓谱软件免费下载 编辑:程序博客网 时间:2024/05/22 14:12
基础篇之《线程》@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.4b。同步函数:直接将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()方法。-----------------------------------------------------------------------------------------------------我是一个菜菜菜菜鸟,想飞却怎么也飞不高,寻寻觅觅,寻寻觅觅·····自学的过程中总结出来的一些关于函数的知识点,我就当一次复习了。有需要的可以参考一下,如有漏掉的或者不完善的谢谢大家指正。
0 0
原创粉丝点击