Java的编程逻辑--15章 并发

1、run()和start()的区别

2、线程的基本属性和方法

  1. id:一个递增的整数,每创建一个线程就加一
  2. name
  3. 优先级:从1到10,默认为5,会映射到系统中的优先级。数字越大,要优先级越高
  4. 状态:
    • NEW :还没调用start 
    • RUNABLE:正在执行run或者正在等待cup分配时间
    • BLOCKED:被阻塞
    • WAITING:被阻塞
    • TIMED_WAITING:被阻塞
    • TERMINATED:结束
  1. 是否daemo线程
  2. sleep方法, 单位是毫秒
  3. yield方法,建议让出cpu
  4. join方法,join(0)或join()标示无限期等待
  5. 过时方法 stop(),suspend(),resume(),已经过时,不应再使用

3、竞态条件:当多个线程访问和操作同一个对象时,最终执行结果与执行时序有关,可能正确也可能不正确。

解决方案:

  • 使用synchronized关键字
  • 使用显示锁
  • 使用原子变量

4、内存可见性:多个线程可以共享访问和操作相同的变量,但一个线程对一个共享变量对修改,另一个线程不一定马上就能看到,甚至永远也看不到。因为涉及到寄存器和各级缓存。

  解决方案:

  • 使用volatile关键字
  • 使用synchronized关键字

5、synchronized

synchronized可用于修饰类的实例方法(保护this),静态方法(保护类对象),代码块(任意对象)。

synchronized保护的是对象而非代码,只要访问的是同一对象的synchronized方法,即使是不同的代码,也会被同步顺序执行。

所以多个线程是可以同时执行同一个synchronized实例方法的,只要他们访问的对象是不同的即可。

可重入性:通过记录锁的持有线程和持有数量来实现的。

保证内存可见性:在释放锁时,所有写入都会写回到内存,而获得锁后,都会从内存中读最新数据。

如果只是保证内存可见性,synchronized的成本有点高,

原文地址:https://www.cnblogs.com/lakeslove/p/9541623.html

时间: 2024-10-17 21:57:05

Java的编程逻辑--15章 并发的相关文章

使用Java理解编程逻辑-第一章

1.什么是Java? Java是前Sun公司(显甲骨文股份有限公司)于1995年推出的高级编程,Java技术应用几乎所有类型和规模的设备上,小到计算机芯片,蜂窝电话,大到超级计算机,无所不在! Java共有三个版本分别为:1.Java SE (平台标准版)Java的核心技术,可开发桌面应用程序 比如微信,QQ.2.Java EE (平台企业版)Java EE是在Java SE的基础上扩展的, 可开发面向Internet的应用程序 比如京东,淘宝3.Java ME 可开发手机上的应用程序 2.配置

java 面向对象编程-- 第15章 集合框架

1.  集合特点:元素类型不同.集合长度可变.空间不固定 2.  java中对一些数据结构和算法进行了封装即集合.集合也是一种对象,用于存储.检索.操作和传输对象. 3.  JCF(Java Collections Framework)是JavaSE中包含的由一组类和接口组成的Java集合框架,其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合时的编码量. 4.  集合框架包含三个内容:接口.实现类.算法.

《java语法实例2~15章》

第二章 1.  数据类型 变量名 =值: Eg: Double score =15.65: String name ="张三": Char sex ="男": 数据类型强转 数据类型  变量名 =(数据类型)值: 示例: Double num=15.75: Int sum =(int)num: 结果:sum=15: 第三章 1.if选择结构 语法:    if(条件){ 代码块     //条件成立后要执行的代码,可以是一条语句,也可以是一组语句 } 示例: If(

java面向对象编程— —第七章 继承

7.1继承的起源 继承(Inheritance),即在面向对象编程中,可以通过扩展(extends)一个已有的类,并继承该类的属性的行为,来创建一个新的类. 已有的类称为父类(也可以称为基类,超类),而新类称为子类(也可以称为派生类). 继承的优点:代码的可重用性:父类的属性和方法可用于子类:子类可以扩展父类的属性和方法:设计应用程序变得更加简单. 7.2 继承的使用原则 观察要使用的类,确定它们之间共同的和特有的属性和行为,将这些共性数据迁移到父类里,便于子类中进行方法和属性的重用. 对于不同

【转】Java多线程编程(十)-并发编程原理(分布式环境中并发问题)

转载地址:http://blog.csdn.net/leicool_518/article/details/42268947 在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理: 避免并发 时间戳 串行化 数据库 行锁 统一触发途径 避免并发 在分布式环境中,如果存在并发问题,那么很难通过技术去解决,或者解决的代价很大,所以我们首先要想想是不是可以通过某些策略和业务设计来避免并发.比如通过合理的时间调度,避开共享资源的存取冲突.

java面向对象编程——第五章 对象的行为

5.1 方法调用栈 当一个方法被调用时,将导致控制流程跳转到被调用的方法.然后,控制流程执行方法中的语句.当然,被执行的方法可能会调用其它方法,导致控制流程跳转到其它方法.所有的方法调用都维护在一个称为调用栈的结构中.当前正在执行的方法位于调用栈的顶部,当前方法执行完成后,就从调用栈的顶部移除,控制流程返回栈中的前一个方法.当一个新方法被调用后,这个新的方法就放在调用栈的顶部. 在java程序中,第一个被调用的方法就是main(),该方法是JVM调用的.因此main()方法总是在调用栈的底部.

【编程珠玑-15章】Strings of pearls

15.1 Words 问题:为文档中包含的单词生成一个列表? 可行的办法是自己建立一个散列表,写一个简单的数据结构来记录单词和单词出现的次数. 1)  散列函数的建立 书中给出的源代码提供了一个字符串散列函数.其实很像经典的BKDR算法.C语言描述如下: unsigned int hash(char *p) { unsigned int h = 0; for ( ; *p; p++) h = MULT * h + *p; return h % NHASH; } 我用java实现BKDRHash(

JAVA 基础编程练习题15 【程序 15 排序】

15 [程序 15 排序] 题目:输入三个整数 x,y,z,请把这三个数由小到大输出. 程序分析:我们想办法把最小的数放到 x 上,先将 x 与 y 进行比较,如果 x>y 则将 x 与 y 的值进行交换, 然后再用 x 与 z 进行比较,如果 x>z 则将 x 与 z 的值进行交换,这样能使 x 最小. package cskaoyan; public class cskaoyan15 { private static int x; private static int y; private

java 面向对象编程-- 第十三章 反射、类加载与垃圾回收

1.狭义JavaBean规范 Javabean必须包含一个无参数的public构造方法,方便通过反射的方式产生对象. 属性必须都是私有的. Javabean必须包含符合命名规范的get和set方法,以便访问Javabean的属性. Javabean应该是可序列化(serializable)的. 2.反射 在编译时,并不清楚应该加载哪个类.类的加载是在运行期间进行的.通过反射,可以对类进行加载.探知.自审. 可以通过对象.getClass()或者通过类名.class或者通过Class.forNam