A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘明乐 初级黑马   /  2019-9-23 16:30  /  1394 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

--------------------------------------------多线程
并发:指两个或多个时间在同一个时间段内发生(交替执行)
并行:指两个或多个时间在同一个时刻发生(同时发生)

进程:是指一个正在内存中运行的应用程序,每个程序都有一个独立的内存空间,一个应用程序可以同时运行多个进程
进入到内存的程序叫进程

线程:是进程中的一个执行单元,负责当前进程中的程序执行,一个进程中至少有一个线程

多线程的实现方式有两种:
1.继承Thread类
重写run()方法
优点:使用方法简单
2.实现Runnable接口
实现run()方法
优点:代码分离  耦合度低
Thread(Runnable target)  分配一个新的Thread对象
Thread(Runnable target, String name)   分配一个新的Thread对象

线程的两种调度方式
分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片
抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些


常用方法:

start()开始程序
get

1.通过set/get方法设置线程的名称
2.通过有参构造设置


线程优先级:
setPriority()
getPriority()

线程控制:
sleep();使当前正在执行的线程停留(暂停执行)指定的毫秒数
join();等待这个线程死亡,后面的才执行
setDaemon(boolean on);将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

线程的生命周期
                   阻塞
                 /          \
创建-----就绪-----运行-----结束

---------------------------------------------------------------------线程同步
为什么会出现安全问题
1.是多线程环境
2.有共享数据
3.有多条语句操作共享数据
打破其中一条就可以创造让程序没有安全问题的环境

同步代码块:
格式:
synchronized(任意对象) {
多条语句操作共享数据的代码
}
好处:解决了多线程的数据安全问题
弊端:当线程很多时,因为每个线程都会去判断同步上的锁,很耗费资源,降低运行效率

同步方法:
同步方法的所对象是this
格式:
public synchronized void 方法名() {
方法体
}

静态同步方法:
静态同步方法的锁对象是本类的class属性
格式:
public static synchronized void 方法名() {
方法体
}

线程安全的类:



Lock类
lock是个接口
Lock lock = new ReentrantLock()
一般搭配try...finally使用
void lock()   获得锁
void unlock()   释放锁

生产者和消费者模式
void wait()   导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法
void wait(long m) 相当于sleep方法,传入一个毫秒值,如果在毫秒值结束之后还没有被唤醒,则自动醒来
void notify()   唤醒正在等待对象监视器的单个线程,如果有多个线程,随机唤醒一个
void notifyAll()   唤醒正在等待对象监视器的所有线程

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马