线程
1.线程是一个程序里不同的执行路径。是一个程序内部的顺序控制流
2.线程和进程的区别
- 每个进程都有独立的代码和数据空间,进程间的切换会有较大开销
- 线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和pc计数器,线程切换开销小
- 多进程:在操作系统中能同时运行多个任务(程序)
- 多线程:在同一应用程序中多个顺序流同时执行
- A process is an execution of a program, while a
Thread
is a single execution sequence within a process. A process can contain multiple threads. AThread
is sometimes called a lightweight process.
3.线程的创建和启动
- a class extend Thread class
重写run方法,然后new一个该类对象。因为该类已经继承了thread类,所以该类就是一个线程类,不需要再new一个线程。直接该对象调用start方法,就能启动多线程。
- a class implement Runnable interface
runnable中只有一个方法run,用来定义线程运行体(方法内部的内容即为要执行的线程内容)
该类implement runnable接口后,override run方法。然后new一个thread对象,将该类的对象作为参数传入,然后再调用start方法。
- An application can use Executor framework, in order to create a thread pool
4.Synchronized可以用用在修饰代码块也可以用在修饰一个方法。
- a。public synchronized void add(){}; b。synchronized(this){ num++; try{}catch(){}}
- 加上synchronized关键字后,一个线程执行代码块或者方法,该对象就被锁定了,但是其他线程可以执行该类中其他的其他方法。
- 如果两个方法都加了同一个值。两个方法都应该加synchronized
- 只有方法是synchronized才可以调用wait方法。 wait时锁不再归其所有,而sleep时锁还归其所有。wait方法和notify方法是一一对应的。notify的作用是叫醒当前正在wait该对象的线程。
- wait是object类方法,sleep是thread类方法。wait是不再拥有锁,其他线程可以访问该对象。sleep时还是拥有锁,其他线程不可以访问该对象。