首先了解一下多线程的概念

多线程:两段或以上的代码同时进行,多个顺序执行流。

并发和并行的区别

并发:做一下这个做一下那个。

并行:同时进行。

线程和进程的区别

进程:资源分配的基本单位,运行中的程序。进程中包括多个线程,线程们共享进程的资源。

线程:处理器调度的基本单位。

线程的状态:

 线程创建的方法:

(1)继承Thread类 (2)实现Runnable接口 (3)匿名内部类、Lambda表达式 (4)带返回值的线程

要想使对象是线程安全的,需要采用同步机制来协同,如果无法实现,那么可能会导致数据破坏和其他的结果,在Java机制中,提供了synchronize、volatile、显式锁等机制来进行,也有三种思路:(1)不在线程之间共享数据。(2)将状态变量修改成不可变变量。(3)在访问时使用同步。

什么是线程安全性:某个类的行为和其规范一致。

原子性:如果某个操作是不可分割的,那么我们就可以称之为原子性操作。

我们在解决线程竞态问题时,不可能只靠通过设置线程安全变量来进行,Java为我们提供了加锁机制。

内置锁:Java为我们提供了synchronize来实现内置锁,synchronize方法以Class对象作为锁。

重入:当某个线程请求被其他线程持有的锁时,就会发生阻塞。然而由于内置锁时可重入的,因此某线程在请求一个已经由它持有的锁时,该请求就会成功。重入的实现方法时为每一个锁关联一个获取计数值和一个所有者线程,当技术值为0时,表示该锁没有被线程持有。如果重入后,计数值会加,当线程退出同步代码时,计数值会减,当计数值为0时,该锁会释放。

Java并发-线程安全性的更多相关文章

  1. Java 并发 线程同步

    Java 并发 线程同步 @author ixenos 同步 1.异步线程本身包含了执行时需要的数据和方法,不需要外部提供的资源和方法,在执行时也不关心与其并发执行的其他线程的状态和行为 2.然而,大 ...

  2. Java 并发 线程的优先级

    Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于 ...

  3. Java 并发 线程属性

    Java 并发 线程属性 @author ixenos 线程优先级 1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程 2.默认情况下,一个线程继承它的父线程的优先级 当在一个运行的线 ...

  4. Java 并发 线程的生命周期

    Java 并发 线程的生命周期 @author ixenos 线程的生命周期 线程状态: a)     New 新建 b)     Runnable 可运行 c)     Running 运行 (调用 ...

  5. JVM之java并发 ——线程安全与锁优化

    概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实 ...

  6. Java并发——线程安全、线程同步、线程通信

    线程安全 进程间"共享"对象 多个“写”线程同时访问对象. 例:Timer实例的num成员,即add()方法是用的次数.即Timer实例是资源对象. class TestSync ...

  7. 从JDK源码角度看java并发线程的中断

    线程的定义给我们提供了并发执行多个任务的方式,大多数情况下我们会让每个任务都自行执行结束,这样能保证事务的一致性,但是有时我们希望在任务执行中取消任务,使线程停止.在java中要让线程安全.快速.可靠 ...

  8. Java并发——线程介绍

    前言: 互联网时代已经发展到了现在.从以前只考虑小流量到现在不得不去考虑高并发的问题.扯到了高并发的问题就要扯到线程的问题.你是否问过自己,你真正了解线程吗?还是你只知道一些其他博客里写的使用方法.下 ...

  9. java并发线程池---了解ThreadPoolExecutor就够了

    总结:线程池的特点是,在线程的数量=corePoolSize后,仅任务队列满了之后,才会从任务队列中取出一个任务,然后构造一个新的线程,循环往复直到线程数量达到maximumPoolSize执行拒绝策 ...

随机推荐

  1. Android读取/dev/graphics/fb0 屏幕截图

    Android屏幕截图有很多方式这里只使用其中一种截图 主要是读取/dev/graphics/fb0,进行转换,复杂点就在如何把读取的数据进行转换. 可以参考一下这篇文章:http://blog.ch ...

  2. 在go中使用json作为主要的配置格式

    最近在用go重构,在先前的代码中,我们使用的ini文件进行配置,但是因为很多历史遗留问题,导致配置混乱,维护困难,自然也需要考虑重构了. 通用配置格式 通用的配置格式有很多,常用的就有ini,json ...

  3. 学习TensorFlow,邂逅MNIST数据集

    如果说"Hello Word!"是程序员的第一个程序,那么MNIST数据集,毫无疑问是机器学习者第一个训练的数据集,本文将使用Google公布的TensorFLow来学习训练MNI ...

  4. WebLogic重启

     1,用户名密码登录. 2,切换到weblogic的bin目录下  cd bea/user_projects/domains/base_domain/bin/ 3,先停止服务器  ./stopWe ...

  5. 看uboot的时候发现随机数的另外一种算法

    #include <stdio.h> #include <time.h> static unsigned int y = 1U; unsigned int rand_r(uns ...

  6. linux 下停止java jar包 shell

    linux 下停止java jar包 shell http://injavawetrust.iteye.com #!/bin/sh APP_HOME=/home/ap/injavawetrust/ba ...

  7. 关于JavaScript中的几种匿名行数的写法

     匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括 ...

  8. 【一天一道LeetCode】#31. Next Permutation

    一天一道LeetCode系列 (一)题目 Implement next permutation, which rearranges numbers into the lexicographically ...

  9. window环境下搭建react native及相关插件

    可以先浏览一下中文翻译的开发文档具体了解一下关于React Native,想要查看官方文档可以点http://facebook.github.io/react-native/docs/getting- ...

  10. 在android C/C++ native编程(ndk)中使用logcat

    最近在研究Android 2.2 源代码的C/C++层,需要对代码进行一些调试,但是奇怪的是,直接添加LOGD("XXXXXXXX");,使用logcat却看不到任何输出,换成LO ...