二.3 java高级-多线程

一,线程概述

1.进程:正在运行的程序

2.线程:进程中同时运行的多个执行单元

关键字:共享资源,

 

3.多线程可以使:多段程序代码交替运行(一段程序代码可以看做一个子任务

4.进程和线程的区别:进程是操作系统进行资源分配的基本单位;线程时操作系统进行调度的基本单位(即CPU分配时间片的基本单位)

 

二,线程的创建

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

(1)创建代码

  创建任务的同时创建线程

MyThread thread1=new MyThread(“thread1”);    
MyThread thread2=new MyThread(“thread2”);

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

(1)创建代码

  创建任务和创建线程分离

MyThread myThread=new MyThread();  //多了步创建继承类的实例对象
Thread thread1=new Thread(myThread,“thread1”);
Thread thread2=new Thread(myThread,“thread2”);

3.实现Callable接口,重写call()方法,并使用Future来获取call()方法的返回结果

(1)创建代码

MyThread myThread=new MyThread();

FutureTask ft1=new FutureTask(myThread);    //多了部包装
Thread thread1=new Thread(ft1,“thread1”);

FutureTask ft2=new FutureTask(myThread);
Thread thread2=new Thread(ft2,“thread2”);

三种实现方法对比:

(2)每种方法都比前一种多了一步

(2)实现Runnable或Callable ,创建任务和创建线程分离。适合多个线程去处理同一个共享资源的情况,将线程同程序代码、数据有效分离

    继承Thread无法资源共享。故只能创建一个售票程序,然后开启多个线程去共享同一个售票对象的售票方法,即让4个线程运行同一个售票程序

(3)避免java单继承带来的局限性

 

三.线程的生命周期及状态转换

 

四.线程的调度

 join(),sleep(timeout),yield()都是Thread类的方法

1.定义:java虚拟机为线程分配CPU的使用权

2.分时调度模型/抢占式调度模型。java虚拟机默认采用抢占式调度模型

3.线程的优先级

(1)优先级越高获得CPU的机会越大

4.线程休眠 Thread.sleep(long millis)

(1)定义:使正在执行的线程暂停,把CPU让给其他线程

(2)Running--->Timed_Wating--->Ready  休眠时间完了才会进入Ready状态,才有机会获得CPU

5.线程让步 Thread.yield()

(1)与线程休眠的区别:不会阻塞该线程,只是将线程直接转换到Ready状态,让系统的调度器重新调度

6.线程插队 thread2.join()

 

五.多线程同步

(多线程去访问同一个资源,也会引发一些安全问题)

(前面通过实现Runnable接口的方式,并不能完全解决线程同步问题)

定义:为了解决线程安全问题,限制某一资源在同一时刻只能被一个线程访问

1.线程安全

解决:处理共享资源的代码在任意时刻只能有一个线程访问

2.同步代码块  synchronized(lock)

3.同步方法   修饰符synchronized

4.同步锁    Lock lock(lock.lock(),lock.unlock())

5.死锁问题

 

六.多线程通信  wait()/notify(),notifyAll()

(1)wait()  使当前线程进入等待状态

    notify()/notifyAll() 唤醒当前处于等待状态的线程  

(2)生产者消费者模型

七.线程池

 

 

 

 

续:

1.wait和sleep的区别

(1).调用wait()方法会释放对象的锁。因此wait方法一般被用于同步方法或者同步代码块中

(2).与wait方法不同的是,sleep方法不会释放当前占有的锁

2.多线程中,为了保证数据的一致性,通常需要在使用对象或者方法前加锁

3.同步块是访问共享资源的代码块。给共享资源上了个锁

4.volatile 关键字 除了防⽌ JVM 的指令重排 ,还有⼀个重要的作⽤就是保证变量的可⻅


 

posted @ 2021-08-10 19:58  midiyu  阅读(24)  评论(0编辑  收藏  举报