-
java并发知识
查看全部 -
jmm(java memory mode) happend-before
locks candition
线程安全
deadlocks
多线程交互模型
java5兵法编程工具
查看全部 -
六、总结与展望
1、学习到的知识点:
a)如何创建线程以及线程的基本操作
b)可见性以及volatile关键字
c)争用条件
d)线程的互斥synchronized
e)线程的同步wait()/notify()/notifyall()
2、扩展建议
a)Java Memory Mode
JMM描述了Java线程如何通过内存进行交互
happens-before原则
如何通过synchronize,volatile,final来实现happens-before原则
b)Locks & Condition 对象
Java锁机制和等待条件的高层实现
java.util.concurrent.locks
c)线程的安全性
原子性和可见性
java.util.concurrent.atomic
synchronized & volatile
DeadLocks
d)多线程编程常用的交互模型
Producer-Consumer模型
Read-Write Lock模型
Future模型
Worker Thread模型
e)Java5中并发编程工具
java.util.concurrent
线程池ExecutorService
Callable & Future
BlockingQueue
查看全部 -
一、线程的特点:
进程是资源分配的最小单位,一个进程中有1—n个线程,线程共享资源,同一时刻只能有一个线程占领CPU
二、多线程:之间争用资源,多线程之间同步与互斥<br>
1,多线程之间的互斥(加锁实现):同一时间,只能有一个线程访问临界区(防止线程之间争用条件造成的“能量损失”)[对该临界资源进行加锁,表示现在只能由该线程进行访问]<br>
2,多线程之间的同步(线程的等待和唤醒:wait()+notifyAll()):通信机制;一个线程完成,以某种方式通知其他线程可以访问临界区<br>
3,锁:private final Object lockObj=new Object();synchronized(lockObj) {}线程互斥
三、重要的话
线程之间的互斥:通过加锁实现:线程访问临界区的代码放在一个代码块中,加锁实现
线程之间的同步:通过wait()+notify()的通信机制来实现
wait()和notifyAll()是在线程同步的时候使用的一对方法查看全部 -
Java线程——线程交互——争用条件
1、当多个线程同时共享访问同一数据(内存区域)时,每个线程都尝试操作该数据,从而导致数据被破坏(corrupted),这种现象称为争用条件
2、原因是,每个线程在操作数据时,会先将数据初值读【取到自己获得的内存中】,然后在内存中进行运算后,重新赋值到数据。
3、争用条件:线程1在还【未重新将值赋回去时】,线程1阻塞,线程2开始访问
查看全部 -
调用interrupt()方法,立刻改变的是中断状态,但如果不是在阻塞态,就不会抛出异常;如果在进入阻塞态后,中断状态为已中断,就会立刻抛出异常
查看全部 -
join就是join所在的线程加入进来,阻塞主线程,直至join所在的线程执行完毕,而在此期间,主线程和子线程是同时无顺序运行的。
yiled 到了当前线程执行的时候,当前线程从执行状态变为就绪状态,cpu会从众多就绪状态中选择,当前线程还是有可能执行的。查看全部 -
Thread.currentThread().getName();获取名称。
volatile
;可见性,java的关键字(保证了线程可以正确的读取
其他线程写入的值)
Thread.yield();让出线程时间。
Thread.sleep();线程休眠
join();使其他线程等待当前线程终止
查看全部 -
java线程中start和run方法的区别
Start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。Run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
在同一时间,同一处理器或同一个核只能运行一条线程,当一条线程休眠之后,另一条线程才获得了我们处理器的时间
2.Runnable接口之中没有getName方法,我们可以使用Thread的静态方法currentThreat().getName()获取该对象的名字。
3.若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程名称
继承Thread和实现Runnable其区别主要在于共享数据,Runnable接口是可以共享数据的,多个Thread可以同时加载一个Runnable,当各自Thread获得CPU时间片的时候开始运行Runnable,Runnable里面的资源被共享。
不管是继承Thread还是实现Runnable接口我们都可以创建线程。在实际开发中大多数情况下是实现Runnable接口的,因为它可以共享数据。
查看全部 -
Thread常用方法
查看全部 -
thread类和runnable接口 都是lang包下面的
查看全部 -
1、进程 : 程序(任务)的执行过程 <动态性>
持有资源(共享内存,共享文件)和线程 <载体>
2、线程 : 系统中最小的执行单元
同一进程中可以有多个线程
线程共享进行的资源
3、线程的交互 : (1)互斥 、(2) 同步
查看全部 -
interrupt查看全部
-
interuptor 初衷不是用于停止线程查看全部
-
不建议使用stop方法查看全部
举报