线程:负责一个进程中的代码执行。线程是进程中的一个执行路径。
线程安全问题出现的根本原因:
1. 存在着两个或者两个以上的线程。
2. 多个线程共享了着一个资源, 而且操作资源的代码有多句。
线程安全问题的解决方案:
1. 使用同步代码块
格式:
synchronized(锁对象){
需要被同步的代码;
}
线程的生命周期状态图(线程总共有图中的这几种状态)
sleep\wait()
<----------临时阻塞<-------------
调用了start方法
抢夺了cpu的执行权
执行完任务
创建 ---------------------> 可运行 ----------------------------->运行 -------------->消亡
<---------------------------
被抢夺了cpu的执行权
同步代码块要注意的细节:
1. 锁对象可以是任意的对象、.
2. 锁对象必须是多个线程共享的对象(锁对象必须是唯一)。
3. 线程调用了sleep方法是不会释放锁对象的。
4. 只有会出现线程安全问题的时候才使用java的同步机制(同步代码块和同步 函数),
死锁现象出现 的根本原因:
1. 存在两个或者两个以上的线程存在。
2. 多个线程必须共享两个或者两个以上的资源。
class SaleTickets extends Thread{
static
int num = 50; //非静态成员变量。 非静态成员变量在每个对象中都维护了一份数据。
public SaleTickets(String name){
super(name); //调用父类一个参数的构造函数, 初始化线程的名字。
}
//线程的任务代码...
@Override
public void run() {
while(true){
synchronized ("锁") {
if(num>0){
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName()+"卖出了"+num+"号票");
num--;
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
System.out.println("售罄了...");
break;
}
}
}
}
}
java Queue.size 线程安全 java 线程安全问题
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java 线程安全的int
java 线程安全的int
线程安全 原子变量 Java