javaoop——第九课笔记(第七章)

第一节:进程与线程的基础概念
一:进程概念
1.程序(任务)的执行过程。(程序指的就是应用程序——例如QQ、播放器等)
注意:进程是动态性的,放在磁盘文件中的文件并不是进程,只有在运行状态的才可称之为进程。
三大状态:加载、运行、结束
程序:就是用代码操作数据。
2.进程持有资源(共享内存,共享文件)和线程。
注意:进程是资源和线程的载体。
3、特点
A:进程是系统运行程序的基本单位。
B:每一个进程都有自己独立的一块内存空间,一组系统资源。(系统资源如一些文件等)
C:每一个进程内部数据和状态都是完全独立的。

二:线程概念——线程是一个程序的多个执行路径
1、线程是系统中最小的执行单元
2、同一进程中有多个线程(运行程序就是进程)
3、线程共享进程的资源

4、线程的交互:多个线程需要正确的交互才能进行工作。
注意:交互方式有互斥同步两种。
5、使用多线程的目的:减少了程序执行的时间
——
——
第二节:创建线程
一:java语言中线程的支持
1、java对线程的支持体现在两个:class Thread(类) 和interface Runnable(接口),在java.lang的包
2、class Thread 和interface Runnable共通的方法是:public void run()为我们提供线程实际工作执行的代码
3、Thread常用方法
join:使当前正在执行的线程暂停执行,等待调用该方法的线程结束后,再继续执行本线程。
yield():当前线程让出CUP,再次交给虚拟机调用,给和自己相同或更高优先级的线程,分配CUP资源。(不过也有可能再分配到自己)
4、重载的几个形式
A:没有参数,指明了其它的线程一定要等待正在执行的线程执行完毕之后,都会获得运行的机会
B:nanos是要把精确度改变,可改成纳秒
5、线程的启动,不能用run方法启动,不然就和普通的对象没区别了。

二:线程的创建和启动
1、两种方法创建线程
A:通过继承 Thread 类
class MyThread extends Thread{};//继承于线程类
Thread myThread = new MyThread();
myThread.start();//线程启动后,会执行run()方法

B:通过实现Runnable接口
class MyRunnable implements Runnable{}//创建一个实现类
Thread myRunnable = new Thread(new MyRunnable);//将这个类的实现类对象传入
myRunnable.start();

C:总结
1、若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程名称。
2、在同一时间,同一处理器或同一个核只能运行一条线程,当一条线程休眠之后,另一条线程才获得了我们处理器的时间
3、在线程的start()方法被调用后,线程启动,JVM会自动调用线程的run()方法来执行任务,run方法会出现在独立的执行空间最上面。线程执行完了,线程也就终止了。
4、优先级高的线程,是有可能优先占用CPU,而不是一定。

2、Thread类的方法
A:.getName() 返回线程的名字
B:.setName(String Name) 改变线程的名字
C:.start() 使该线程开始执行,Java 虚拟机调用该线程的 run 方法。
D:.sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。线程不丢失任何监视器的所属权。
E:.currentThreat() 返回对当前正在执行的线程对象的引用。(静态方法,返回Thread类型)
——
——
第三节:线程同步
一:并发性——多线程的缺点
1、并发性问题会引发竞争状态,竞争状态会引发数据损毁
2、并发性的发生,来源于,如果两个不同执行空间(线程)上的方法,都对同一个对象执行读改命令。

二:同步化
1、因为并发性的问题,我们需要给一些方法加上锁
2、加上synchronized关键字,代表方法被同步化,在单一线程执行完,整个方法前,其他线程无法进入该方法。
3、对象就算有多个同步化方法,但也还是只有一个锁,一把钥匙。
所以,如果一旦有某个线程进入该对象的同步化方法,在解锁前,其他线程就无法进入该对象上的任何同步化方法。(因为一个对象只有一把钥匙)
注意:对象的锁,只会在同步化方法上起作用。(锁不是在方法上,而是在对象上!
4、如果对象有两个同步化方法,那么就代表两个线程无法进入同一同步化方法也无法进入不同的同步化方法。(想要进入,只有等单一线程执行完同步化发那个发,将对象的钥匙归还
注意:使用同步化方法,一般是该方法,有操作对象成员变量的操作。
三:死锁
1、发生情形是,两个线程互相持有对方等待的东西,也就是钥匙。
2、因为方法的同步化,线程如果没有钥匙无法进入
3、只要有两个线程和两个对象,就可以引发死锁。
阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页