1.包
package关键字
public —— 包与包之间访问
protected —— 访问父类中被protected修饰的成员
默认权限 —— 同一个包中访问
private —— 同一个类中访问
import
2.多线程
1)概念
进程,一个正在执行中的程序。
线程,进程由一个或多个线程控制。
2)创建线程
A方式——继承thread类
①定义一个类继承Thread类,覆盖run()方法,run()里存储这线程要运行的代码,就相当于主线程里的main();
②创建一个该类对象,创建一个线程;
③调用对象的start()方法,启用这个线程,并调用run()运行;
注:currentThread():获取当前对象;getName():获取线程名称;setName()设置线程名;
B方式——实现Runnable接口
①定义一个类实现Runnable接口,覆盖run()方法;
②建立一个该类对象;
③通过该对象利用Thread类的构造函数Thread(Runnable target)建立线程;
④通过新建的Thread对象的star()启动线程
这种方式比A方式好的地方在于避免单继承的局限性,这种定义线程的方式优于上一种。
3)线程的运行状态
4)线程的安全问题——同步代码块
synchronized(锁){
需要被同步的代码
}
同步代码块的锁可以用任意对象。
synchronized可以直接修饰函数,同步函数和同步代码块效果相同。
静态同步函数的锁,是Class类创建的类对象。
同步函数的锁是this对象。
多线程同步需要同一个锁。
5)死锁:
同步嵌套
6)线程间通信——多个线程用不同的动作操作同一个资源
a)需同步的操作用一个锁;
b)等待唤醒机制——wait() notify() notifyAll()
这些线程操作必须使用在同步中;
等待唤醒操作需用线程监视器调用,只能唤醒监视器标识的线程。
7)Lock接口 Condition接口
用实现了Lock接口的类(例如ReentrantLock类)创建对象,这个对象作为锁,具备以下功能:
lock_target.lock(); 锁定代码
lock_target.unlock(); 解锁代码
lock.newCondition(); 创建Condition对象
通过Condition对象操作同一个锁内的指定线程:
condition_target.await();冻结线程
condition_target.signal();唤醒线程
8)Thread类interrupt()方法——强制解除线程冻结状态。
9)Thread类setDaemon(true)方法——设定为守护线程,后台线程,在前台线程结束后自动结束。
10)Thread类join()方法——当A线程执行到B线程的.join()时,A进入等待,直到B执行结束。
11)yield()方法——暂停线程,释放执行权;
setPriority()方法——设置优先级,1~10;
注:Thread.currentThread()——获得当前线程对象