线程是操作系统能够运行调度的最小单位,它包含在进程之中,是进程的实际运作单位
多线程有三种实现方式
线程实现方法1,继承Thread类(无返回值):
1、继承Thread
2、重写run方法(线程要执行的代码)
3、创建子类对象,并启动线程 .start
线程实现方法2,实现Runnable接口(无返回值):
1、自己定义一个类实现Runnable接口
2、重写里面的run方法
3、创建自己类的对象
4、创建Thread类的对象,并开启线程
线程实现方法3,实现Callable接口:
可以获取多线程运行结果
1、创建一个类实现Callable接口
2、重写call方法(有返回值,多线程运行的结果)--重写时带泛型,为返回值类型
3、创建MyCallable对象(表示多线程要执行的任务)
4、创建FutureTask对象(管理多线程运行的结果)
5、创建Thread对象,并启动线程
线程常用方法:
Thread.sleep()
线程优先级:
默认优先级5,范围为1-10
守护线程:setDaemon,当所有非守护线程结束后,守护线程也会终止执行
Thread.yield()礼让线程,尽可能让线程执行均匀
join 插入线程
线程的生命周期
线程安全
synchronized,锁对象一般是当前类的字节码文件(确保唯一)
synchronized可以修饰同步代码块&同步方法
StringBuilder是线程不安全的,StringBuffer是线程安全的
Lock手动加锁,解锁
多线程等待唤醒机制:
阻塞队列:
ArrayBlockingQueue<T>,LinkedBlockingQueue<T>,这两个队列是线程安全的
queue.put(), queue.take()
线程池: