多线程
来源:互联网 发布:什么牌子沙发好 知乎 编辑:程序博客网 时间:2024/06/11 22:22
1:进程和线程
2:Thread:1) 进程:系统分配资源和调用的独立的单位,正在运行的一个应用程序就是一个进程.
2) 多进程:多进程的意义就是提高CPU的使用率,
玩游戏的同时,也在听歌,这就是多进程,但是多进程不是在同时运行,只是CPU在两个进程之间进行高效的切换.
3) 线程: 线程是依附于进程,可以理解为是进程的一个子任务,一个进程有多个线程,就叫多线程程序.
4) 多线程: 多线程的意思是为了让每个线程抢占CPU的使用权.
1) 创建一个类继承Thread类,然后实现run()方法,run()方法必须是耗时的,不然是没有意思.然后创建自定义的对象,调用start()方法,启动线程.
2) Thread的方法:
getName():得到当前线程的名字; setName(String name): 给线程设置一个名字,
static yeild();终止当前线程的执行权,让其他线程抢占CPU,
static currentThread();返回当前正在运行的线程,
static sleep(long millis);让线程休眠,millis是毫秒数,
join();让这个线程一直执行到结束,才能执行其他线程,
Daemon(boolean flag);把当前线程设置为守护线程,当剩下所有的线程都是守护线程时,jvm会停止运行,
getPriority();得到当前线程的优先级(1-10);优先级只是线程抢到CPU的几率变大,
3:Runnable:
1) 自定义类实现Runnable接口,然后实现run()方法,创建自定义类对象,然后将对象作为参数传到Thread的构造方法中,
创建出Thread的对象,调用start()方法,启动线程.
2) 模拟电影院卖票场景,加入了延迟,出现了问题,
a) 电影票出现了同票问题; 这个是由于CPU执行一次具有原子性操作!
b) 电影票出现了数量变多问题; 线程的执行具有延迟性和随机性!
3) 线程安全问题: 需要将对共享数据操作的语句,封装到一个独立的代码块中,用关键字:synchronized.
格式: synchronized( 锁对象 ) { ... }
锁对象:多线程所用到的锁对象必须是一致的;锁对象可以是Object类的对象,也可以是自定义类的对象.
如果一个方法中进去之后都是同步代码块,那么可以将这个方法定义为同步方法;同步方法的锁对象是this,如果方法是静态方法,则为当前类名.class
4) Lock:锁对象,Lock是一个接口,ReenTrantLock是它的实现子类, Lock lock = new ReenTrantLock();
public void lock();加锁 public void unlock();释放锁 throws IllegalMonitorStateException
5) 等待唤醒机制:
由于同步中存在死锁问题:两个线程都在等待对方,
notify();唤醒当前正在等待的一个线程,wait();让这个线程处于等待状态,并且释放所有的锁.
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- 多线程
- centos7 安装java和tomcat9
- 11.3课堂笔记和作业
- X11简介及Xlib参考手册地址
- ZOJ 3993 Safest Buildings(概率 数学)
- SQL Server2008 学习之(一) :入门知识
- 多线程
- python发送带附件邮件
- 洛谷 1197 星球大战 并查集 解题报告
- 大数据Web工具Hue
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
- Python学习(一)
- tf-Time travel时间穿梭
- C/C++动态内存管理
- D