面向对象,java的核心思想就是面向对象编程,以贴近人类在现实生活中的思考方式,任何事物我们都会把它抽象成一个对象,一辆车,一个人,对象是我们思考的基石。

我想说的是,我们写汉字的时候,不会在脑海中命令我们的手去写一撇一捺,我们要么把汉字抽象为一个整体,比如“日”,要么抽象为偏旁的组合,比如“明”,一个白天一个晚上,就是明天了。

英语也是如此,就像synchronized,也是由几部分组成,syn+chron+ized。不是有人说过,学习java,最重要的能力就是——抽象能力。

第一:synchronized的应用场景是什么?

第二:synchronized的实现原理是什么?

第三:synchronized的实现方式是什么?

第四:synchronized的易错点是什么?

第一:synchronized的应用场景是什么?

当多个对象(线程)在同一段时间内需要同样的资源的时候,因为资源的有限性和唯一性,需要更新资源的当前情况来约束对象的行为。比如典型的车票出售,银行取钱等等。感觉抽象的不好。

第二:synchronized的实现原理是什么?

当两个并发线程同时访问同一个对象(Object)的同步代码块(synchronized(this))的时候,一个时间内(cpu时间片)只允许其中一个线程得到执行这个同步代码块,另一个线程必须等待当前线程执行玩以后才可以执行那个同步代码块;但是另一个线程可以去执行对象的非同步代码块,注意,该对象的其他未访问的同步代码块也不能再被其他线程访问,以免容易造成死锁。(显然同步代码块设置过多也有弊端)

第三:synchronized的实现方式是什么?

有同步代码块和同步方法两种来完成。同步代码块更为常用,同步方法如果设置的方法一直在运行,比如run(),那么资源一直无法释放。

package com.enjoyor.soa.traffic.server.nmim.thread;

public class TestThread implements Runnable{

    public TestThread(){};

    private int appleCount = 4;

    public void run(){
for (int i = 0; i < 3; i++) {
synchronized (this) {//不设置为同步代码块会出现资源状态异常,比如负数,重复。
if(appleCount>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"is"+appleCount--);
}
}
}
} public static void main(String[] args) {
TestThread newTh1 = new TestThread();
//TestThread newTh2 = new TestThread();
Thread Th1 = new Thread(newTh1,"向淋吃苹果");
Thread Th2 = new Thread(newTh1,"吴磊吃苹果");
Th1.start();
Th2.start();
}
}
package com.enjoyor.soa.traffic.server.nmim.thread;

public class TestThread implements Runnable{

    public TestThread(){};

    private int appleCount = 4;

    public void run(){
for (int i = 0; i < 3; i++) {
eat();
}
} private synchronized void eat(){
if(appleCount>0){
try {
Thread.sleep(1000);//休眠的时间设定很有意思
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"is"+appleCount--);
}
} public static void main(String[] args) {
TestThread newTh1 = new TestThread();
//TestThread newTh2 = new TestThread();
Thread Th1 = new Thread(newTh1,"向淋吃苹果");
Thread Th2 = new Thread(newTh1,"吴磊吃苹果");
Th1.start();
Th2.start();
}
}

pojo中的set和get方法可能会需要同步。

消费者和生产者问题,加入同步和唤醒操作,通过flag,设置wait()>sleep()>notify().

第四:synchronized的易错点是什么?

暂无,等以后深入接触补充。

synchronized四要素及抽象的更多相关文章

  1. mysql 事务四要素杂谈

    事务四要素 对于数据库来说,并发性和准确性是数据库需要权衡的两个点. 类似于我们的应用系统,又要要性能还要要准确. 数据准确性这一条来说,最好的控制就是串行化,都别急,一个一个来.这样数据就没问题了. ...

  2. Java基础-四要素之一《抽象》(接口)

    抽象的概念就是抽象出共同属性:成员变量和方法 定义抽象使用abstract关键字定义抽象类和方法 抽象类 abstract class 包含抽象方法的类,叫抽象类. 所以抽象类可以有private等多 ...

  3. ACID 数据库正确执行四要素

    ACID:数据库事务正确执行所必须满足的四个基本要素的缩写: 原子性(atomicity,或叫不可分割性),一致性(consistency),隔离性(isolation,又称独立性),持久性(dura ...

  4. Java基础-四要素之一《封装》

    封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保 ...

  5. Java基础-四要素之一《继承》

    继承的概念: 继承在本职上是特殊——一般的关系,即常说的is-a关系.子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法. 继承是所有OOP语言不可缺少的部分,在java中使 ...

  6. synchronized(四)

    package com.bjsxt.base.sync005;/** * synchronized的重入 * @author alienware * */public class SyncDubbo1 ...

  7. 设计模式(四)——Java抽象工厂模式

    抽象工厂模式 1 基本介绍 1) 抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 2) 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 3) ...

  8. Java基础-四要素之一《多态》

    什么是多态 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的 ...

  9. UI设计四要素

    信息.样式.布局.交互. +层次: UI所有的工作都可以从这几个方面入手.

随机推荐

  1. jqGrid配置属性说明

    Property Type Description Default1) ajaxGridOptions object This option allows to set global ajax set ...

  2. HDU5322 Hope(DP + CDQ分治 + NTT)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...

  3. CodeForces 540

    A. Combination Lock time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. 撑100s小游戏

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...

  5. Android课程---关于数据存储的学习

    activity_data1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  6. finally类

    finally叫做最后的执行快,什么是最后的执行快?他的意思是这样的 他是写在try catch 的后面但是只能写一个,他设计这个finally的意思就是,如果try里面出错肯定会往陷阱里 面跑.没有 ...

  7. NV SDK 10 (1) Clipmaps

    Clipmaps sample: Abstract Clipmaps are a feature first implemented on SGI workstations that allow ma ...

  8. Neil·Zou 语录二

    1 “Later equals never !”LeBlanc法则   2 爱情使人忘记时间,时间也会使人忘记爱情,不要让太多的昨天占据你的今天,请相信:是你的不管你怎样任性他都不会离开你:失去的其实 ...

  9. Maven环境搭建

    1,下载maven zip版   http://maven.apache.org/download.cgi 2,配置maven环境变量 (1) 新建MAVEN_HOME环境变量  E:\TOOLS\A ...

  10. [bzoj1072] [SCOI2007]排列perm

    有一种暴力算法就是直接枚举. 正解就是状压dp 令f[i][j]:i:使用的数位的状态j:当前的模数 边界:f[0][0] = 1; f[i|1<<k][j*10+k % n] += f[ ...