开始系统地来学习多线程。采用边学变记录的方式。不想耽误太多时间来码字,所以我打算写的随意一点,以自己能看懂为目的,来记录一些需要记住的知识,便于日后的复习,虽然也可能根本不复习,但是记录还是有用的,至少能让后我现在加深一次记忆。
1. 进程,线程
1.1 进程
运行在内存中的exe程序,就是进程。就像任务管理器里看到的exe程序,都是正在运行的进程。
1.2 线程
线程可以理解为,在进程中独立运行的子任务。打个比方,QQ.exe运行时就有很多子任务在同时运行,比如好友视频线程,下载文件线程,发送表情线程等等。这些不同的任务都能同时进行,这些子任务都可以理解为线程在工作。
1.3 线程的优点
使用多线程,可以在同一时间同时运行不同种类的任务。通过一个图可以清楚的看到优点所在。
使用多线程,任务2便不用等到任务1运行完才能运行。这是就是多线程的优点,使用多线程也就是在使用异步。
2. 使用多线程
有两种方法来实现多线程,一种是继承Thread类,一种是实现Runnable接口。
因为Java不支持多继承,一个子类只能有一个父类。所以当想创建的线程类已经有一个父类时,就不能再继承Thread类了,这时需要通过实现Runnable类来实现多线程。
注意:启动多线程,必须使用thread.start()方法,且类里的方法名必须为run(),开启start()方法后,run()方法会被自动调用。另外还需要知道,执行start()方法的顺序不代表线程启动的顺序,顺序是随机的。
2.1 非线程安全问题
指的是多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。
解决方法是在方法前加 synchronized 关键字。