Thread类常用方法
- start():启动当前线程;调用当前线程的run()方法
- run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作
- Thread.currentThread():获取当前线程
- setName():设置线程名称
- yield():放弃占用CPU将CPU的使用权让给别的线程
- join():在线程A中调用B的join(),此时线程A进入阻塞状态,必须等待B执行完毕,A才能够继续执行
- sleep():休眠
线程的生命周期
新建,,就绪,运行,阻塞,死亡
线程同步
- synchronized同步代码块,锁对象必须唯一。object是锁对象,相当于几个人需要进入一个小仓库拿货物,但是一次只能进去一个,object相当于钥匙,每次一个人拿这把钥匙进去,出来再把钥匙给另外一个人。
synchronized (Object) {
for (;;) {
if (ticket > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ": " + ticket);
ticket--;
}
}
}
- synchronized同步方法
懒汉式线程安全效率高的写法
class Bank {
private Bank() {}
private static Bank instance = null;
public static Bank getInstance() {
if (instance == null) {
synchronized (Bank.class) {
if (instance == null) {
instance = new Bank();
}
}
}
return instance;
}
}
线程池
// 1.指定线程数量的连接池
ExecutorService service = Executors.newFixedThreadPool(10);
ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;
// 设置线程池属性
service1.setCorePoolSize(0);
// 2.执行线程池操作,需要提供实现Runnable接口或Callable接口实现类的对象
service.execute(new NumberThread());
// 3.关闭连接池
service.shutdown();