线程常用API

Thread的构造器

线程的休眠时间

  • public static void sleep(long time),当前线程休眠指定的时间后再继续执行,单位为毫秒
  • 静态方法是属于类的,直接可以用类名来调用Thread.sleep(199)
  • 项目经理让我加上这行代码,如果用户愿意交钱,我就注释掉这项代码
  • 总结:
String getName()//获取带你给钱线程的名称,默认县城名称是Thread索引
void setName(String name)//设置线程的名称
public static Thread currentThread()// 返回当前正在执行的线程对象的索引
public static voidsleep(long time)//让线程休眠指定的时间,单位为毫秒
public void run () //线程任务方法
public void start()//线程启动方法

2. Thread常用方法、构造器。
public Thread(String name)//可以为当前线程指定名称

public Thread (Runnable target)//把Runnable对象交给线程对象
public Thread(Runnable target)//把Runnable对象交给线程对象
public Thread (Runnable target ,String name)//把Runnable对象交给线程对象,并指定形成名称

线程安全问题

  • 多个线程同时操作一个共享资源的时候可能会出现业务安全问题,称为线程安全问题
  • 锁对象的规范要求
  1. 规范上:建议使用共享资源作为锁对象
  2. 对于实例方法建议使用this作为锁对象
  3. 对于静态方法建议使用哦个字节码(类名.class)对象作为锁对象
  • 同步方法底层原理
  1. 同步方法其实底层也是有隐式锁方法的,只是锁的范围是整个方法代码
  2. 如果方法是实例方法:同步方法默认用this作为锁对象,但是代码要高度面向对象
  3. 如果方法是静态方法:同步方法默认用类名.class作为锁的对象
  • 同步方法和同步代码块那种同步方法比较好?
  1. 同步代码块锁的范围比较小,同步方法锁的范围更大
  • 对和新方法使用synchronized修饰

Lock锁

是接口不能直接用,需要实现类来使用

  • 为了更加清晰的表达如果枷锁和释放锁,

线程通信


线程池

  • 什么是线程池
  1. 线程池就是一个可以服用线程的技术
  • 不使用线程池的问题
  1. 如果用户每发起一个请求,后台就创建一个新的线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
  • 线程池的API
  • 如何得到线程池对象
  1. 使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象,
  2. 使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象
  • 临时线程什么时候创建?
  1. 新任务提交时发现核心线程都很忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程
  • 什么时候会开始拒绝任务?
  1. 核心线程和临时线程都再忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝

你可能感兴趣的:(java,数据结构,jvm)