- 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)