三种实现方式
常用成员方法
1.线程name默认“Thread-”+"序号"
2.可以通过重写构造方法在创建时给线程命名
线程的生命周期与状态
同步代码块
- 格式
synchronized(锁对象){
操作共享数据的代码
}
1.锁对象随机,但只要是有static修饰的唯一对象,一般写本类class文件,如MyThread.class
2.必须写在循环内部
同步方法
修饰符 synchronized 返回值类型 方法名(方法参数) {...}
- 特点1:同步方法是锁住方法里面所有的代码
- 特点2:锁对象不能自己指定
- 非静态:this
- 静态:当前类的字节码文件对象
lock锁
生产者和消费者(等待唤醒机制)
主要用wait和notifyAll
阻塞队列方式实现
- ArrayBlockingQueue
底层数组,有界 - LinkedBlockingQueue
底层链表,最大为int最大值
put数据时:放不进去,会等着,也叫做阻塞。
take数据时:取出第一个数据,取不到会等着,也叫做阻塞
线程池
//1.获取线程池对象
// ExecutorService pool1 = Executors.newCachedThreadPool();//无上限
ExecutorService pool1 = Executors.newFixedThreadPool(3);//有上限
//2.提交任务
pool1.submit(new MyRunnable());
pool1.submit(new MyRunnable());
pool1.submit(new MyRunnable());
pool1.submit(new MyRunnable());
pool1.submit(new MyRunnable());
//3.销毁线程池(一般不销毁)
// pool1.shutdown();
自定义线程池