1. 多线程
1.1 创建自定义线程类的方式
方式一:
自定义线程类,继承Thread类,重写run方法
创建自定义线程对象,直接调用start方法,开启线程
方式二:
自定义线程类,遵从Runnable接口
使用自定义遵从接口Runnable实现类对象,作为Thread构造方法参数
借助于Thread类对象和start方法,开启线程
1.2 Thread类方法
Thread();
Thread(Runnable target);
Thread(String name);
Thread(Runnable target, String name);
void setName(String name);
String getName();
void setPriority(int Priority);
int getPriority();
void start();
public static void sleep(int ms);
public static Thread currentThread();
2. 线程安全问题解决方式
2.1 同步代码块
synchronized () {
}
2.2 同步方法
synchronized 作为关键字来修饰方法,修饰的方法就是对应的同步方
有且只允许一个线程进入,到底是谁来完成的加锁操作?
1. 静态成员方法
锁对象,是当前类对应的字节码文件.class 类名.class
2. 非静态成员方法
锁对象就是当前类对象 this
选择同步方法是否使用static修饰问题
1. 如果非static修饰,要保证执行的线程对象有且只有一个,因为锁对象就是当前线程对
象
2. 如果是static修饰,锁对象具有唯一性,多个线程使用的锁是同一个锁。
2.3 Lock锁
Java提供了一个对于线程安全问题,加锁操作相对于同步代码块和同步方法更加广泛的一种操作方式。
1. 对象化操作。
创建Lock构造方法
Lock lock = new ReentrantLock();
2. 方法化操作。
开锁:
unlock();
加锁:
lock();
3. 守护线程
守护线程,也称之为后台线程,如果当前主线程GG思密达,守护线程也就GG思密达。
守护线程一般用于:
1. 自动下载
2. 操作日志
3. 操作监控
方法是通过线程对象
setDeamon(boolean flag);
true为守护线程
false缺省属性,正常线程