JAVA_多线程学习笔记
线程和进程
进程: 当你点开一个QQ.exe的时候是一个进程,点开WeChat.exe的时候又是另外的一个进程。
线程:当你点开QQ.exe的时候,QQ这个程序里面又有许多同时在执行的线程。
创建多线程
创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类
第一种 实现Runnable接口 重写run方法
第二种 通过继承Thread来创建线程
创建一个线程的第二种方法是创建一个新的类,该类继承 Thread 类,然后创建一个该类的实例。
继承类必须重写 run() 方法,该方法是新线程的入口点。它也必须调用 start() 方法才能执行。
第三种: 匿名类
使用匿名类,继承Thread,重写run 方法,直接在run方法中写业务代码。
线程的创建,目前我就学习了上面三种方式。
关于线程的一些常见的方法:
关键字 | 简介 |
---|---|
sleep | 当前线程暂停 |
join | 加入到当前线程中 |
setPriority | 线程优先级 |
yield | 临时暂停 |
setDaemon | 守护线程 |
1.sleep 当前线程暂停
Thread.sleep(1000);表示当前线程暂停有1000毫秒,别的线程不受影响。此时有可能抛出InterruptedException中断异常,因为线程暂停的过程中,有可能被停止。
2.join 加入到当前线程中
所有的线程都会有一个主线程,把一个线程加入到主线程,则主线程会等待该线程执行完 才继续往下执行。
3.setPriority 线程优先级
当多个线程同时竞争资源的时候,优先级高的线程获得cpu的概率会大大的增加。我们可以观察到优先级高线程获得cpu资源的能力更强。
4.yield 当前线程临时暂停,其他线程获取cpu资源的能力上升。
5.setDaemon 守护线程
守护线程: 当一个进程里,所有的线程都是守护线程的时候,结束当前进程。
比如一个学校里面,不光有教书的老师,上课的学生,还有负责做饭的食堂,负责卫生的后勤部门。 这些后勤部门就相当于守护进程一样,守护老师学生上课的正常进行。当不再有老师上课这样的活动(进程),只剩下后勤部门时(守护进程),那这个学校也就可以倒闭了(进程结束)。
守护线程通常会被用来做日志,性能统计等工作。