1、Java多线程机制,授课:谢老师,本次课程主要内容,线程相关的基本概念 线程的创建方法和启动 线程常用的方法 线程的同步机制,线程相关的基本概念,程序,进程,线程的概念 程序:一系列代码、数据或者文件的组合体。例如后缀名为.exe的硬件驱动程序。 进程:一个程序在开启运行时的执行活动 。例如某个聊天工具程序开启后,就有一个对应的进程。 线程:一个进程的子执行路径。一个进程可以同时拥有一个或者多个线程 。,程序:火车站的售票系统。它是由售票机,验钞机,身份证识别器等相关的办公设备和办公用品的组合体。在售票时间,火车站的售票系统处于运行的状态。售票时间结束,就处于静止状态。进程:售票系统(即售票窗
2、口)在售票时间的运行活动。线程:一个或者多个售票窗口在执行售票的活动,线程的创建方法和启动,线程的两种实现方式 第一种,定义一个类,该类继承Thread,重写run()方法,调用start()方法启动线程。,线程的创建方法和启动,第二种,定义一个类,该类实现Runnable接口,重写run()方法,生成Thread实例,该Thread实例调用的构造方法参数是定义的已实现Runnable接口的实例,调用Thread实例的start()方法启动线程。,线程的状态,Java中的线程有几种状态分别是:就绪、运行、阻塞、结束。 运行:即处于执行代码程序的状态,线程实例执行run()方法。 就绪:调用一个
3、线程实例的start()的方法的时候。注意,并非是调用start()方法就立刻开始执行,这涉及到线程的优先级和实际系统的运行情况。同等优先级的线程,要看cpu是先处理哪个线程。 阻塞:线程处于暂停执行的状态。 结束:线程执行完毕。,线程常用的方法,isAlive() :判断线程是否处于“活着”状态,就是看这个线程是否已经终止了。 setPriority() :设置线程优先级,默认5 。 getPriority() :获取线程的优先级。 Java提供了线程调度器,线程调度器会根据线程的优先级来判断执行线程的顺序。 Thread.sleep(long millis) :线程暂停。 join :线程
4、合并。 yield :让给别的线程使用CPU 。 interrupt():终止线程 。 wait:线程暂停,可以用notify唤醒 notify/notifyAll 唤醒wait的线程。,作业,采用两种方式实现线程 每个线程在执行过程中每隔1000毫秒打印一条语句 主线程在20秒后终止所有线程 将程序运行的控制台打印结果截图作为作业完成情况提交,多线程的同步机制,多个线程会使用某一个资源(像待售余票),为了保证资源被使用的时候,只有一个线程在使用,而不会出现一张票同时卖个多个人的情况发生,就需要资源对象的“互斥锁”。 synchronized 关键字修饰,可以使某一资源在任一时刻只能被一个线程
5、调用访问。,synchronized 不同位置的差别,修饰方法 synchronized method 修饰代码块 synchronized (this) ,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,动车车票,死锁,线程都在等待被其他线程占用并堵塞了的资源 如果线程A锁住了资源1并等待资源2,而同时线程B锁住了资源2并等待资源1,这样两个线程就发生了死锁现象,作业,模拟电影院某个影院的当天电影票的多窗口售票,实现该小程序 将程序运行的控制台打印结果截图作为作业完成情况提交,生产者消费者问题,生产者将生产的资源放入特定的缓冲区; 消费者将需要消费的资源从缓冲区取出; 当缓冲区满的时候,生产者暂停生产,消费者的消费行为造成缓冲区有空余空间的时候,唤醒生产者继续生产; 当缓冲区资源被消费完的时候,消费者暂停消费,当生产者完成生产的时候,唤醒消费者继续消费。,