Java线程同步与死锁认识
讲下自己的认识,算小小的总结吧!
synchroized 具有同步线程的功能,它的处理机制类似于给参数里面的对象赋一个标记值,来表明当前状态,当程序里面某个线程执行synchroized里面的代码段时,它会先对这个状态进行判断,如果处于0这种状态,它会暂时被阻塞,所以能有效防止数据错误的产生。
死锁这个概念,个人理解是两个线程或多个线程产生冲突,例如两个线程,两个代码块,当线程一在处理代码块一的时候,这个时候要用到代码块二的东西,而线程二在处理代码块二的东西,也希望调用代码块一的东西,这个时候由于各自线程都锁住当前代码块,导致一直处于阻塞状态,然后就崩溃了。
一个简单的例子:
package t1; public class t5 { public static void main(String[] args) {
t t1 = new t(); Thread tt = new Thread(t1);
Thread tt1 = new Thread(t1); tt.start();
tt1.start(); } } class t implements Runnable {
private int num = 2000; public void run() { while (true) {
synchronized (this) {
if (num > 0) {
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
System.out
.println(Thread.currentThread().getName() + " " + num); num--;
} else
break;
}
}
}
}
Java线程同步与死锁认识的更多相关文章
- java 线程同步、死锁
转载地址:速学堂 https://www.sxt.cn/Java_jQuery_in_action/eleven-thread-synchronization.html 什么是线程同步 同步问题的提 ...
- java 线程同步 原理 sleep和wait区别
java线程同步的原理java会为每个Object对象分配一个monitor, 当某个对象(实例)的同步方法(synchronized methods)被多个线程调用时,该对象的monitor将负责处 ...
- Java线程同步_1
Java线程同步_1 synchronized 该同步机制的的核心是同步监视器,任何对象都可以作为同步监视器,代码执行结束,或者程序调用了同步监视器的wait方法会导致释放同步监视器 synchron ...
- Java线程同步之一--AQS
Java线程同步之一--AQS 线程同步是指两个并发执行的线程在同一时间不同时执行某一部分的程序.同步问题在生活中也很常见,就比如在麦当劳点餐,假设只有一个服务员能够提供点餐服务.每个服务员在同一时刻 ...
- C#线程同步与死锁Monitor
在上一讲介绍了使用lock来实现C#线程同步.实际上,这个lock是C#的一个障眼法,在C#编译器编译lock语句时,将其编译成了调用Monitor类.先看看下面的C#源代码: public stat ...
- java线程 同步临界区:thinking in java4 21.3.5
java线程 同步临界区:thinking in java4 21.3.5 thinking in java 4免费下载:http://download.csdn.net/detail/liangru ...
- JAVA - 线程同步和线程调度的相关方法
JAVA - 线程同步和线程调度的相关方法 wait():使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁:wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等 ...
- Java线程同步的四种方式详解(建议收藏)
Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...
- Java之线程,常用方法,线程同步,死锁
1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据 ...
随机推荐
- mvvm框架正式名字确定
经过长时间的选名,今天终于把名字定下来了,ddrjs data drive render,其实框架的核心还是 数据驱动渲染,其实现在市面上的大部分mvvm框架如:angular.vue.avalon ...
- C++朝花夕拾【更新】
C++拾遗 更新一些平时遇到的小细节: 1.关于类的无参构造函数和带有全部默认参考值的构造函数的区别 书上说的是带有全部默认值的构造函数就是无参构造函数,私以为不以为然,来看下边这个例子: #incl ...
- CListBox控件基本功能
创建CListBox对象 CListBox m_ListBox;关联控件 ,同时注意行数从 0 开始计算 1.向控件中添加内容 int AddString(LPCTSTR lpszItem ); ...
- linux vi 使用脑图
- C语言初学 简单计算器计算加减乘除程序
#include<stdio.h> main() { float a,b; char c; printf("输入表达式如a+(* - /)b:\n"); scanf( ...
- MVC4,4月22日,Ninject的另外注入方式。
学习了Ninject另外两种绑定注入的方式: 1.根据属性绑定 先在特殊的实现借口类中定义属性 使用 2.根据构造函数方式绑定 学习了条件绑定方式(conditional bindi ...
- PHP 之Mysql增删改查操作案例
1:user表: CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMARY KEY (`id`) ...
- qt编写一个只能运行单个实例的程序,不用Windows API
QtSingleApplicationhttp://code.qt.io/cgit/qt-solutions/qt-solutions.git/tree/qtsingleapplication 已打开 ...
- 8.2.1.1 Speed of SELECT Statements 加速SELECT 语句
8.2.1 Optimizing SELECT Statements 8.2.2 Optimizing Data Change Statements 8.2.3 Optimizing Database ...
- 动态SQL使用绑定变量
SQL> begin for i in 1..1000000 loop execute immediate 'insert into p1 values(i)' ; c ...