学习JAVA,关于线程 以及 synchronize 的问题

没有sleep的情况下代码与结果
这是在没有sleep的情况下代码与结果
我运行了多次都是main2000 b = 1000 的结果
那么可以认为,main线程 是 一定 比 t 这个线程要快的吗?
main 和 t 这两个线程 是在同时运行的吗?
m2 加 上sleep
这是m2 加 上sleep
如果说 main 比 t 快
程序运行的到m2时 会先sleep(1000),然后b = 2000
同时m1 必须等m2 结束才能运行
当systemout输出后 不应该接着运行 那个输出tt.b 是2000 的值吗
为什么结果像是在m1 运行后 才输出的 1000这个结果
这样看t 线程又比 main 快了。。。。为什么会这样。。。
是我理解哪里出了问题。。。。
所以还想请教一下大家。。。。

还有下面这个两个该怎么理解。。。
1.锁的对象是谁,2.谁持有了锁

0
扫码支付0.1元 ×
其他相关推荐
Java多线程之深入理解synchronize关键字
synchronize锁重入:关键字synchronize拥有锁重入的功能,也就是在使用synchronize时,当一个线程的得到了一个对象的锁后,再次请求此对象是可以再次得到该对象的锁。 当一个线程请求一个由其他线程持有的锁时,发出请求的线程就会被阻塞,然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由她自己持有的锁,那么这个请求就会成功,“重入” 意味着获取锁的 操作的粒度是“线程
Thread多线程学习(二),java多线程中synchronize锁的使用和学习
synchronize我的理解是为了保证程序中的原子性和一致性,即当你有两个线程同时操作一段代码的时候,要让这段代码的执行是在任何状态下都是正确的,首先要保证synchronize的使用要对同一个对象和同一把锁使用。 public class TraditionalThreadSynchronized { public static void main(String[] args) {
java多线程之内存可见性(浅谈synchronize 和volatile)
注:本博客是慕课网的一个免费课程的学习笔记, 有兴趣的同学可以去看看: 细说Java多线程之内存可见性 什么是内存可见性?      可见性: 一个线程对共享变量值的修改,能够及时地被其他线程看到 什么是共享变量?      共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 什么是JMM?      Java内存模型JMM(Java Memo...
用JAVA模拟生产者与消费者的实例
用JAVA模拟生产者与消费者的实例,java 生产者 消费者 操作系统
java多线程和synchronize锁
一、线程的5个状态 1.创建状态 线程对象被创建后,就进入了新建状态。此时它和其他Java对象一样,仅仅由Java虚拟机分配了内存,并初始化其成员变量值。 2.就绪状态  也被称为“可执行状态”。线程对象被调用了该对象的start()方法,该线程处于就绪状态。Java虚拟机会 为其创建方法调用栈和程序计数器。处于就绪状态的线程,随时可能被CPU调度执行,取决于JVM中线程
synchronize底层实现原理以及相关的优化
首先来说下synchronize和Lock的区别: 两者都是锁,用来控制并发冲突,区别在于Lock是个接口,提供的功能更加丰富,除了这个外,他们还有如下区别: synchronize自动释放锁,而Lock必须手动释放,并且代码中出现异常会导致unlock代码不执行,所以Lock一般在Finally中释放,而synchronize释放锁是由JVM自动执行的。 Lock有共享锁的概念,所以可以设...
Java之线程同步与安全(Thread Synchronize & Safe)
[color=green][size=medium][b]Java之线程同步与安全(Thread Synchronize & Safe)[/b][/size][/color] [size=medium][b]一、问题背景[/b][/size] Java语言提供了多线程的功能。 多线程创建于相同的Object,多线程间共享Object的变量或属性。 但是,当线程对共享的数据进行读写时...
线程—代码模拟—生产者-消费者
尚学堂—马士兵-java系列网上免费视频教程 知识点: 1.Thread.sleep(); 2.Runnable接口 3.Object.wait() 4.Object.notify(); 5.if 和 While 的区别 6.synchronized 关键字 ProducerConsumer.java ( 1.其实,编译后会生成5个class文件。但只需运行 Produ...
Java线程(初级)——synchronized、死锁、wait、notify详解
线程可以在任意对象的监视器(锁)上阻塞(wait,前提是获取到该对象的锁),也可以在唤醒任意一个wait在某个对象的监视器上的线程(notify,前提是获取到该对象的锁)。“获取到某个对象的锁”,就像获取到某种资格一样,只有有了这种资格才能够让自己阻塞在该锁上面或者唤醒已经阻塞在该锁上的其它线程。由此可知,每个对象的监视器上面自愿wait和被notify的线程只和该对象有关。因为每个对象都具有锁,每个锁均不同,故wait和notify的方法调用要通过对象调用,所以wait和notify方法要在Object中
JAVA多线程关键字synchronize的使用方法
 这里通过对一个银行存钱取钱程序的模拟去演示在使用多线程的时候synchronize关键字的作用。 1. 不加同步锁的代码 package threadTest; public class Bank { private int count =0;//账户余额 //存钱 public void addMoney(int money)...
java多线程——synchronize关键字详解
synchronize的基本使用 在并发编程中synchronized一直承担的非常重要的作用,它有以下三种使用方式 作用于普通方法,锁的是当前实例对象 作用于静态方法,锁的是当前类的Class对象 作用于同步方法块,锁的是synchronized括号里面的对象 当一个线程访问一个同步代码块的时候,首先获得锁,只有当退出或抛出异常的时候,才会释放锁。 那么它究竟是如何实现的呢?我们通过反编译如...
Delphi中多线程中Synchronize的运用
Delphi中多线程用Synchronize实现VCL数据同步显示,Delphi中多线程用Synchronize实现VCL数据同步显示转自:http://blog.csdn.net/maxcode/archive/2006/05/12/726766.aspx概述:        VCL实现同步的另一种方法就是调用线程类的Synchronize的过程,此过程需要一个无参数的procedure,故
关于Java锁的面试总结
面试过程中,也被问过几次关于Java中锁的问题,面试官一般是这么问:你了解Java中的锁吗?有几种?都有什么区别?讲一讲。     大致可以分为这几点:锁是什么,有什么用,有哪几种锁,锁的区别。 一:锁是什么,有什么用?   锁主要用来实现资源共享的同步。只有获取到了锁才能访问该同步代码,否则等待其他线程使用结束释放锁。 二:有哪几种锁?   这里主要针对:synchro
Delphi:与VCL同步(Synchronize()、用消息来同步)
先说一下RTL和VCL   RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系统及进程有关   RTL提供类之间继承于 TObject 和 RTL内部的类   VCL(Visual Component Library),可视化组件库,包括Graphics、classes、Controls等与
java的锁机制,synchronize与Lock比较
以前线程同步只知道synchronize关键字,后来才知道还有个lock,为什么还要有个lock来实现同步呢synchronized的局限性 占有锁的线程等待IO或者其他原因被阻塞,没有释放锁的情况下,其他线程一直阻塞 多个线程同时读写文件的时候,读和读操作也会发生冲突 我们没有办法知道当前我们的线程是否成功获取了锁,只能傻傻的等待 有这些限制所有其他的同步机制来解决,所以就有了lock,lock常
多线程:synchronize、volatile、Lock 的区别与用法
Java多线程之内存可见性和原子性:Synchronized和Volatile的比较 在说明Java多线程内存可见性之前,先来简单了解一下Java内存模型。 (1)Java所有变量都存储在主内存中 (2)每个线程都有自己独立的工作内存,里面保存该线程的使用到的变量副本(该副本就是主内存中该变量的一份拷贝) (1)线程对共享变量的所有操作都必须在自己的...
Java从线程安全到synchronized和Lock探索
掌握线程安全及多线程问题是我们编写高性能代码的基础,下面将从理论到实践,一层一层的解开。可以看我的另一篇史上最全java并发攻略。 目录 1. 什么是线程安全? 2. 避免线程安全问题 2.1 原子性 2.2 可见性 2.3 有序性 3. synchronized方案 1. 锁升级 2.锁消除 4.锁粗化 4. lock方案 5. lock与synchronized区别 ...
如何用一句话介绍synchronize的内涵
本文发布于专栏Effective Java,如果您觉得看完之后对你有所帮助,欢迎订阅本专栏,也欢迎您将本专栏分享给您身边的工程师同学。 内涵与表象 关于synchronize,一个非常通俗易懂,很容易记住的解释是: Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 这个解释很好,它非常直观的告诉我们使用syn
【java并发】传统线程互斥技术—synchronized
在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊、售票系统啊等。为了避免这些问题的出现,我们可以使用synchronized关键字来解决,下面针对synchronized常见的用法做一个总结。首先写一个存在并发问题的程序,如下:public class TraditionalThreadSynchronized { public static void main(String
Java中synchronize 与lock实现多线程同步
在“java多线程1-多线程创建与线程同步”这篇博文 提到创建多线程import org.junit.Test; class Work implements Runnable { @Override public void run() { for(int i = 0; i<3; ++i){ System.out.println("thread
Delphi中多线程同步过程Synchronize的一些说明
在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchronize,使用起来非常方便,解决了很多VC开发中碰到的常见问题,但是在看了很多Delphi代码后,发现很多人对于Synchronize的理解还是有问题的,不能很好地正确使用Synchronize过程,本文对Synchronize过程的使用提出
当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法
当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法? 1、其他方法generalMethod() 没有加入synchronized修饰符 package thread; public class Test { public synchronized void synchronizedMethod(){ System.out.printl
java 中volatile和synchronize的区别和比较
volatile和synchronize的比较: 1.volatile是线程同步的轻量级实现,所以volatile的性能要比synchronize好;volatile只能用于修饰变量,synchronize可以用于修饰方法、代码
关于Synchronize的使用方式和区别
在多线程中我们往往需要保证数据的一致性,在Java中可以使用Synchronize互斥锁进行同步操作,下面我们来说一下不同的使用方式与区别。方式一:锁定对象class Test { volatile int sum = 0; // 同步方法,锁定该方法所在的对象,多线程调用同一对象的不同synchronized方法、synchronized(this)时互斥 public synchr...
同步代码块synchronize在Java中的应用
原文链接:http://blog.csdn.net/luoweifu/article/details/46613015synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个
多线程同步锁synchronized(全局锁,对象锁)
synchronized锁住的是代码还是对象  在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。 关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码: class Sync {
synchronize的实现原理
锁的数据结构同步代码块是使用monitorenter和monitorexit指令实现的,任何java对象都有一个monitor与之关联,当一个monitor被持有后,对象就处于锁定状态。在运行期间,Mard Word里存储的数据会随着锁标志位的变化而变化。Mark Word可能变化为存储以下数据结构。自旋锁  通常我们称Sychronized锁是一种重量级锁,是因为在互斥状态下,没有得到锁的线程会被
Delphi中多线程用Synchronize实现VCL数据同步显示
概述:        VCL实现同步的另一种方法就是调用线程类的Synchronize的过程,此过程需要一个无参数的procedure,故在此procedure中无法传递参数值,但可以通过类的成员来实现。在类的Execute中只须调用Synchronize就可以了。 实现:        关键在于对Synchronize参数的定义。定义一个无参数的procedure通过它
Java练级打怪路--synchronized对比cas
原创 沙茶敏碎碎念 2016-11-27 21:56 前言 这篇文章的营养非常有限,只是一个夜黑风高的晚上,突发奇想,如果我要统计一个网站的PV,程序应该怎么写呢? 一种挫逼的写法 这是一种无锁的写法,很明显,这个东西是线程不安全的。我们使用12个线程,每个线程执行 10^8次方add的操作,发现最终的结果并没有得到期望的1.2*10^9次方。 上面一个是总数,下面一
Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性
上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 基本介绍了进程和线程的区别、实现多线程的两种方式、线程安全的概念以及如何使用Synchronized实现线程安全,下边介绍一下关于Synchronized的其他基本特性。 一、Synchronized锁重入 (1)关键字Synchronized拥有锁重入的功能,也就是在使用Synchronized的时候,当...
ios中常用的线程同步策略-synchronize …
@synchronize      The @synchronized directive is a convenient way to create mutex locks on the fly in Objective-C code.                                   The @synchronized directive does what any othe
关于线程的内存泄漏问题
线程在程序设计中占有很重要的地位,而关于线程的使用方法和注意事项也有很多,这篇文章主要讲讲如何创建一个线程并且让我们的程序避免内存泄露问题的出现。 线程的创建很简单,使用pthread_create函数,但是要注意参数的问题。 下面就一些例子说明线程的内存泄露问题。 ``` #include &quot;../common.h&quot; //包含一些函数所需要的头文件 pthread_t ...
Java并发编程-06-Synchronize关键字同步机制
一、临界区 Critical Section 临界区是一个用以访问共享资源的代码块,这个代码块在同一时间内只允许一个线程执行 二、同步 1、当一个线程试图访问一个临界资源时,它将使用一种同步机制来查看是不是已经有其他的线程进入临界区 2、如果临界区没有其他线程,它就可以进入临界区。如果已经有线程进入临界区,它就被同步机制挂起,直到进入的线程离开这个临界区 3、如果在等待进入临
关于线程的学习心得
线程、多线程、并行、并发   1.什么线程 要解释线程,就必须明白什么是进程。 什么是进程呢?     进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。 要点...
深入研究 Java Synchronize 和 Lock 的区别与用法
在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。   我们先从最简单的入手,逐步分析这2种的区别。   一、synchronized和lock的用法区别   synchronized:在需要同步的对象中加入此控制,synchronized
线程的同步控制synchronized和lock的对比和区别
我们在面试的时候,时常被问到如何保证线程同步已经对共享资源的多线程编程。我们当然用同步代码块,同步方法,又或者是用java提供的锁机制来达到对共享资源变量的同步控制。 那么我们什么时候用synchronized,什么时候用lock,以及他们的区别是什么呢; 首先来说synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,通过对对象的头文件
Java中的sleep()和wait()方法的区别,关于对象锁、类锁和线程同步synchronized的理解
第一部分:sleep和wait   sleep属于Thread类,wait属于Object类。   sleep可在任意位置使用,wait只能在同步代码块或方法中使用且和notify一起使用。   sleep让当前线程停止执行,其它线程可以执行,但sleep不会释放锁,同步synchronized的共享数据仍然不能访问;   wait会释放锁,可协调多个线程对共享数据存取,必须在synchr...
Java 线程安全问题及线程锁(读书笔记)
首先整理多线程同步的知识点,开头肯定是要先探讨探讨多线程同步的问题。那么嘛叫线程安全问题呢? 答: 我们知道Jvm虚拟机的设计中线程的执行是抢占式的,线程的执行时间是由底层系统决定的。所以就会有多个线程访问同一个数据时的不同步问题。这个就是多线程安全问题。
史上最全 Java 多线程面试题及答案
这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 1、多线程有什么用?   一个可能在很多人...
java线程synchronized锁重入及出现异常锁自动释放
synchronized锁重入       关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到了一个对象的锁后,再次请求此对象时是可以再次得到该对象的锁。...
文章热词 jQuery学习 设计制作学习 虚拟化技术学习 机器学习教程 Objective-C培训
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习线程的问题 java中关于线程的学习