Java多线程多线程创建85课件讲解.pptxVIP

  • 0
  • 0
  • 约5.88千字
  • 约 81页
  • 2026-02-09 发布于陕西
  • 举报

Java多线程:多线程创建;线程Thread;

创建线程;;;线程是参与系统调度的最小单位,它被包含在进程中,是进程中的实际运行单位

一个线程指的是进程中一个单一顺序的控制流

一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务

;当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫作程序的主线程(MainThread)

任何一个进程都包含一个主线程,只有主线程的进程称为单线程进程

其它的线程通常由主线程创建,也称为主线程的子线程;会Java多线程编程是Java软件工程师岗位技能要求

;Java多线程编程是Java1+x考证的内容

;线程是程序运行的基本单位

线程不单独存在,而是包含在进程中

同一个进程中的多个线程共享该进程中的全部系统资源

线程都有各自的调用栈(callstack,线程栈),自己的寄存器环境(registercontext),自己的线程本地存储(thread-localstorage);;自定义类Thread1,并继承java.lang.Thread类,重写run方法,每隔1秒输出线程名称

;创建Thread1对象,调用start()方法启动线程,调用join方法等待thread1线程结束

;自定义类实现Runnable接口,并重写run方法

;实例化该Runnable接口的实现类SellTicketTask对象,实例化Thread类对象,并把该对象传递到参数中,调用start方法启动线程

;自定义类MyCallable实现Callable接口,并重写call方法

;创建FutrueTask对象,并将Callable接口的实现类对象传递到FutrueTask构造方法,创建Thread对象,并将FutrueTask对象传递到构造方法,并调用start方法

;创建线程需要操作系统资源,频繁创建和销毁大量线程需要消耗大量时间,很多小任务让一组线程来执行,而不是一个任务对应一个新线程。这种能接收大量小任务并进行分发处理的就是线程池。

;初始化线程池类ThreadPoolExecutor的构造函数

;自定义类Task实现Runnable接口,并重写run方法

;创建ThreadPoolExecutor线程池对象,调用execute()方法往线程池添加任务

;1、线程的概念及线程特点;

2、创建和使用线程的四种方式;;Java多线程:线程同步;线程同步问题;

解决线程同步问题方法;;;当多个线程同时运行时,线程的调度由操作系统决定,任何???个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行,如果多个线程同时读写共享变量,会出现数据不一致的问题

;创建DrawMoneyTask类实现Runnable接口

;测试类

运行结果,两个线程每次运行结果是一样的,thread1取100块后余额剩下900;同时thread2取100块后余额还是剩下900,这就出现了数据不一致的问题

;;synchronized修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象

synchronized修饰一个成员方法,作用的对象是成员方法所在类的this对象

;加上synchronized同步代码块

;加上synchronized修饰成员方法

;从JDK5.0开始,Java提供了更强大的线程同步机制—通过显式定义同步锁对象来实现同步

java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象

ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显式加锁、释放锁

;加上ReentrantLock.lock()和ReentrantLock.unlock()保证线程同步代码安全

;1、线程同步问题及重现线程同步问题代码示例;

2、使用synchronized关键字解决线程同步;

3、使用ReentrantLock实现线程同步

;Java多线程:线程状态及wait、notify方法使用;线程状态;

wait、notify方法与线程状态转换;

wait、notify方法使用;;一个线程对象调用start()方法启动新线程,新线程中执行run()方法,run()方法执行完毕,线程就结束了,线程有以下状态

;新建状态(NEW):用new语句创建的线程处于新建状态,此时它和其他Java对象一样,仅仅在堆区中被分配了

文档评论(0)

1亿VIP精品文档

相关文档