失效链接处理 |
Java的多线程与同步问题 PDF 下载
本站整理下载:
相关截图:
主要内容:
java程序运行原理:
Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程,该进程会自动启动一个“主线程”,然后主线程去调用某个类的main方法。所以main方法运行在主线程中,在此之前的所有程序都是单线程的。
jvm虚拟机的启动是多线程的,原因是垃圾回收线程也要启动,否则很容易出现内存溢出。
线程是依赖进程而存在的,所以我们应该先创建一个进程。而进程是由系统创建的,所以我们应该调用系统功能创建一个进程。Java是不能直接调用系统功能的,所以我们没有办法直接实现多线程程序。但是Java可以调用c/c++写好的程序来实现多线程程序,Java提供了一些类供我们使用。thread类有两种方式实现多线程。
方法1:继承thread类
步骤:a自定义类继承thread类
b自定义类里面重写run()方法(不是所有代码都需要被线程执行,而run方法中包含的是被线程执行的代码(一般是比较耗时的代码))
c创建对象
d启动线程
Run()和start()的区别:
Run():仅仅是封装被线程执行的代码,直接调用是普通方法
Start():首先启动线程,然后再由jvm调用该线程的run()方法。
Public static thread currentThread():返回当前正在执行的线程对象。
线程调度的两种调度模型:
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个。Java使用的是抢占式调度模型。
注意:
线程默认优先级为5
线程优先级的范围是:1-10
线程优先级高仅仅表示线程获取CPU时间片的概率高,但是要次数比较多,或多运行才能看到比较好的效果。
Public static void yield():暂停当前执行的线程对象,并执行其他线程
Public void join():等待这个线程的死亡
Public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,java虚拟机退出,该方法必须在启动线程前调用。
Public void interrupt():中断线程。把线程的状态终止,并抛出一个InterruptException。
线程的生命周期:
|