Java线程
进程:
1.操作系统中,并行执行的任务
2.cpu时间被切分成一个一个小的时间片
3.一个时间片上,只能处理一项任务
线程: 进程内部并行执行的任务
线程创建方式:1.继承 Thread 2.实现 Runnable
线程状态:创建、可执行,执行、阻塞、消亡
方法:
1.获得正在执行的线程对象
Thread.currentThread()
2.让线程暂停指定的毫秒时长
Thread.sleep(毫秒时长)
3.让步,放弃时间片
Thread.yield()
4.获取线程名:getName() 设置线程名:setName()
5.启动线程,线程启动后,执行run()方法: start()
6.打断一个线程的暂停状态,被打断的线程,会出现打断异常 InterruptedException: interrupted()
7.当前线程暂停,等待被调用的线程结束: join()
8.把线程设置成后台线程、守护线程 : setDeamon(true) * 虚拟机回到等待所有前台线程都结束后,自动关闭 * 而不会等待后台线程结束
9.获取线程优先级:getPriority() 设置线程优先级别:setPriority() 优先级 1 到 10 默认 5
多线程共享数据冲突问题
* 一个线程修改数据
* 另一个线程访问数据,可能访问到修改了一半的数据,称为“脏数据”
线程同步:synchronized
* java任何对象,都有一个同步锁
* synchronized 关键字,要求执行的线程,必须获得锁,才能执行
1.争夺指定对象的锁:
* synchronized (对象) {
...}
2.争夺当前对象的锁
synchronized void f() {.....}
3.争夺类对象的锁
static synchronized void f() {......}
*多线程 为了保证线程安全,必须降低效率,牺牲性能
生产者、消费者模型:是线程之间传递数据的一种方式
等待与通知:
1.当前线程,在指定对象上等待:stack.wait
2.在指定的对象上发送通知:
stack.notify() //通知所有线程中的一个
stack.notifyAll() //通知全部线程
3.Object 中定义的方法:wait() notify() notifyAll()
* 必须在同步代码块内才能调用
* 必须在加锁的对象上等待
* wait()外面,通常是一个循环条件检查
同步监视器模型:执行到synchronized,会在加锁的对象上,关联一个同步监视器对象
浙公网安备 33010602011771号