并发编程;这种能够让多个任务同时运行的编程方式称为并发(Concurrency)编程。
线程概述;一个正在运行的程序通常称为一个进程(Process),每个进程都有自己独立的一块内存空间,每个进程的内部数据和状态都是完全独立的。
线程编程相关API;ava多线程编程相关的核心类和接口主要包括Thread类、Runnable接口、Object类等。
线程的创建;
在Java中,可以使用两种方法来创建一个新线程:
编写一个继承Thread类的类,然后在类中重写Thread类的run()方法。
编写一个类实现Runnable接口,然后将该类的实例与java.lang.Thread对象联系在一起。
通过继承Thread类来创建线程;
- 创建一个继承Thread类的类。
- 在创建的Thread子类中重写run()方法,在方法中写入想要线程运行的代码。
- 创建Thread子类的实例。
- 通过调用该实例上的start()方法,开始运行线程。
通过实现Runnable接口来创建线程;
1) 创建一个类实现Runnable接口,用于代表我们需要线程完成的任务。
2)在Runnable指定的run()方法内,放入想要在线程中执行的代码
3) 创建一个Runnable类的实例。
4) 创建一个Thread对象,将Runnable的实例做为构造器参数传入进去
5)通过调用Thread类的实例的start()方法,开始执行线程。
创建多线程程序;
线程的优先级;线程运行的顺序并不是以该线程创建的先后顺序而定,而是以优先级来决定。这也是在上面的程序中,先创建的线程未必会先运行的原因。优先级分三种,最大为10,最小为1,默认为5。
线程的状态;新建(new),挂起(yield),休眠(sleep),
休眠;一定时间内线程停止运行进入休眠状态,但是之后是直接进入就绪状态。
挂起,让开道路让出cpu控制权一定时间。
join()方法;该方法会让当前正在运行的线程暂停运行,并等待调用join()方法的线程运行完成后,才继续运行。
yield()方法;yield()方法会让线程由Running状态直接回到Runnable状态,而不会阻塞(Blocked)一段指定的时间。因此,如果调用yield()方法的线程的优先级太高的话,该线程很可能会立刻由Runnable状态变为Running状态。
线程同步
当两个以上的线程需要访问共享资源时,我们必须确定在同一时间点只有一个线程能够存取共享资源,而运行这个目标的过程就称为同步。
wait() 让使用对象的线程停止运行,并进入等待,直到另一个使用该对象的线程运行notify()方法。
notify() 线程在对象中碰到notify()方法时,会唤醒使用相同对象的第一个碰到wait()的线程。
notifyAll() 线程在对象中碰到notifyAll()方法时,会唤醒使用相同对象的所有线程,并让优先权最高的线程准备运行。
计算机程序在实现多任务处理有两种方式:基于多进程和基于多线程。
创建线程类的两种方法:实现Thread类和实现Runnable接口。
通过调用start()方法来启动线程。
线程优先级分别为1-10,默认优先级为5。
同步允许一次只有一个线程访问共享资源,同步可分为同步方法和同步块。
线程之间通过wait()、 notify()、 notifyAll()方法通信。
两个线程在两个同步对象上循环依赖时,将发生死锁