synchronized:利用上锁实现数据同步,避免多线程操作的情况下,数据出现异常。

另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

一个线程获得了一个对象的同步锁,那这个对象上所有被同步的代码都不能执行,但不影响其他非同步代码。

在代码块前加上 synchronized关键字,则此代码块就成为同步代码块,

同步代码块:明确锁住对象

synchronized(同步对象){
需要同步的代码;
}

同步方法,跟同步代码块的功能类似:锁住的对象是this

public synchronized void fun1(){
...
}

实例:

class MyThread implements Runnable
{
int i = 100;
public void run(){
while(true){ //并不是锁止状态,t1,t2同时进入
System.out.println("-------------"+Thread.currentThread().getName());
synchronized(this){ //如t1锁住,就算t2抢到cpu也进不去
System.out.println(Thread.currentThread().getName() + i);
i--;
if(i<0){
break;
}
}
}
}
}
class Test
{
public static void main(String args[]){
MyThread myThread = new MyThread();
//生成两个Thread对象,共用一个线程体
Thread t1 = new Thread(myThread);
Thread t2 = new Thread(myThread); t1.setName("线程a");
t2.setName("线程b");
t1.start();
t2.start();
}
}

java:synchronized的更多相关文章

  1. java关键字:synchronized

    JAVA 如何共享资源 关于synchronized函数: java具有内置机制,可防止某种资源(此处指的是对象的内存内容)冲突.由于你通常会将某class的数据元素声明为private,并且只经由其 ...

  2. Java多线程5:synchronized锁方法块

    synchronized同步代码块 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间.这种情况下可以尝试使用 ...

  3. Java并发编程:synchronized

    Java并发编程:synchronized 虽然多线程编程极大地提高了效率,但是也会带来一定的隐患.比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据.今天我们就 ...

  4. Java并发编程:Synchronized及其实现原理

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

  5. Java的synchronized关键字:同步机制总结

    JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块.搞清楚synchronized锁定的是哪个对象,就能帮助我们设计更安全的多线程程 ...

  6. 生产者-消费者模型的3种Java实现:synchronized,signal/notifyAll及BlockingQueue

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3555111.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  7. Java多线程:synchronized关键字和Lock

    一.synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自<大型网站系统与Java中间件实践>) 案例一:其中fo ...

  8. Java多线程:synchronized的可重入性

    从Java多线程:线程间通信之volatile与sychronized这篇文章中我们了解了synchronized的基本特性,知道了一旦有一个线程访问某个对象的synchronized修饰的方法或代码 ...

  9. Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)

    Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...

随机推荐

  1. MySQL语法语句大全

    一.SQL速成   结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如表.索引.字段等)的建立和操纵.   以下是一些重要的SQL快速参考,有关SQ ...

  2. Delphi XE5教程2:程序组织

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  3. 每日一“酷”之Queue

    Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...

  4. C# sogou地图API应用总结

    地图的初始化1.添加引用地图的API文件: <script src="http://api.go2map.com/maps/js/api_v2.5.1.js" type=&q ...

  5. oracle 外部表

    CREATE TABLE "EXT_ENTRY_WORKFLOW" ( ), ), "CREATE_DATE" DATE, ), ), ), ), ), ), ...

  6. 【Python】 最简单的web服务

    python -m SimpleHTTPServer  8321 1.python 没有指定目录的参数 想启动目录 就cd到该目录下 2.在目录下创建一个index.html 3.启动web服务,(端 ...

  7. MVC学习系列——HtmlHelper扩展

    微软自带很多HtmlHelper: ActionLink - 链接到操作方法.BeginForm  - 标记窗体的开头并链接到呈现该窗体的操作方法.CheckBox  - 呈现复选框.DropDown ...

  8. 大晚上装CocoaPods出现错误坑爹

    大晚上装CocoaPods出现错误坑爹 [!] Pod::Executable clone 'https://github.com/CocoaPods/Specs.git' master xcrun: ...

  9. MVC下用C#实现Excel导出

    Aspx页面脚本: function exportxls() { window.open("/Common/HomeExport?startdate=" + $("#hi ...

  10. VBS基础篇 - RegExp 对象

    正则表达式(RegExp)对象下面的代码说明了RegExp对象的用法: Function RegExpTest(patrn, strng) Dim regEx, Match, Matches '创建变 ...