1.线程基本概念

进程:

进程是指运行中的程序,每启动一个进程,操作系统就会为它分配内存,是程序的一次执行过程

线程:

线程是进程的最小单位,每一个进程有多个线程

并发:

同一时刻,多个任务交替执行,造成一种”同时进行“的感觉,简单来说,单核cpu实现的多任务就是并发

并行:

同一个时刻,多个任务同时执行,多核cpu即可实现

2.java中线程的实现方法

1、继承Thread类

  1. class MyThread extends Thread {
  2. @Override
  3. public void run() {
  4. super.run();
  5. }
  6. }

继承Thread类,重写run()方法

2、实现Runnable接口

  1. class MyThread implements Runnable {
  2. @Override
  3. public void run() {
  4. super.run();
  5. }
  6. }

实现Runnable接口,重写run()方法

注意:

1)创建线程后,一定要调用线程的start()方法,才会执行新的线程

2)执行run()方法,只会在main线程执行普通的方法,并没有开启新的线程

3)start()方法是里面有一个start0()是一个本地方法,底层由C、C++实现,由JVM调用,真正实现多线程的效果是start0()方法,而不是run()方法

4)start()方法调用start0()方法后,该线程并不一定立即执行,只是将该线程变为了可执行状态,具体什么时候执行,由cpu统一调度

3.线程常用方法

1、setName(): 设置线程名称

2、getName(): 取得线程名称

3、start(): 线程执行

4、run():线程执行逻辑

5、setPriorty/getPriority:

6、sleep(): 休眠

7、interrup():中断线程

4.线程的礼让

1、yield()方法:线程让出cpu、让其他线程执行,但礼让的时间不确定,也不一定成功

2、join()方法:线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程的所有任务

5.守护线程

1、一般为工作线程服务,当所有的用户线程结束、守护线程自动退出

2、常见的守护线程:垃圾回收机制

3、setDaemon(true):设置守护线程

6.线程的同步

1、线程同步,即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作

2、关键字Synchronized

  • 同步代码块

    1. synchronized(对象) {
    2. //需要同步的代码块
    3. }
  • 同步方法

    1. public synchronized void m(String name) {
    2. //需要同步的代码
    3. }

3、同步的局限性:导致程序的执行效率降低

4、同步方法(非静态的)的锁可以是this,也可以是其他对象,默认为this

5、同步方法(静态的)的锁是类本身

7.释放锁的案例

1、同步代码块执行完

2、遇到break,return等语句

3、遇到未处理的Error、Exception导致异常终止

4、wait()方法会释放锁

5、线程的Thread.sleep()方法、Thread.yield()方法会暂停当前线程的执行,但不会释放锁