首页编程java编程什么是同步java java里同步是什么意思

什么是同步java java里同步是什么意思

编程之家2023-10-1388次浏览

大家好,关于什么是同步java很多朋友都还不太明白,今天小编就来为大家分享关于java里同步是什么意思的知识,希望对各位有所帮助!

什么是同步java java里同步是什么意思

Java:什么叫做同步非阻塞IO呢

首先这个不是JAVA特有的概念。

同步非阻塞:同步指的是调用者程序需要等待被调用逻辑执行完毕才可以继续向下执行,阻塞指的是被调用程序逻辑不能立即返回,需要调用程序等待。“非阻塞”体现在I/O函数立即返回给调用者一个结果而不论I/O中是否含有数据。主程序需要根据每次调用I/O函数返回的值判断数据是否已经准备OK,如果可以被处理了才继续往下进行处理。(因此“其它的操作”,可以是不断轮询调用的IO函数,也可以做其它任何事情(比如我判断当前没有数据,就不处理数据了,随便干个别的事情完事--!))

楼主之所以有疑问,是因为楼主的案例看起来都得等待IO完成才可以继续处理吧,看起来都是“阻塞”了主程序的数据处理逻辑(没有数据后续还做什么处理是吧),但事实是你可以不处理数据,做其它任何事情,因此上述IO并没有阻塞你的程序执行(IO函数没有阻塞调用者程序),只是在数据处理的逻辑上阻塞了(逻辑阻塞)。

什么是同步java java里同步是什么意思

总:楼主这个所谓“其他的操作“呢?在逻辑处理上应该是写一个轮训判断IO的数据是否OK,每一次轮训相对于是做了一个"其它操作",因为上一个时刻的函数调用并没有阻塞后一个时刻的函数调用。(注意理解“逻辑阻塞”与“程序阻塞”)

备注:

推荐阅读unixBIO,NIO,AIO这是三个是本质,javaNetty即其中的I/O多路复用模型实现;(B: Block阻塞的含义, N:Non-Block, A: Async)

什么是同步java java里同步是什么意思

之所以有这么多复杂的模型,实际上都是为了节省计算机的资源,按细了说比如CPU,比如内存。其它角度看,线程也是一种比较奢侈的资源。

java里同步是什么意思

一般有两种方法同步方法和同步代码块

假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。

1.把synchronized当作函数修饰符时,示例代码如下:

Public synchronized void methodAAA()

{

//….

}

这也就是同步方法,那这时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也就是说,当一个对象P1在不同的线程中执行这个同步方法时,它们之间会形成互斥,达到同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以任意调用这个被加了synchronized关键字的方法。

上边的示例代码等同于如下代码:

public void methodAAA()

{

synchronized(this)//(1)

{

//…..

}

}

(1)处的this指的是什么呢?它指的就是调用这个方法的对象,如P1。可见同步方法实质是将synchronized作用于object reference。――那个拿到了P1对象锁的线程,才可以调用P1的同步方法,而对P2而言,P1这个锁与它毫不相干,程序也可能在这种情形下摆脱同步机制的控制,造成数据混乱:(

2.同步块,示例代码如下:

public void method3(SomeObject so)

{

synchronized(so)

{

//…..

}

}

这时,锁就是so这个对象,谁拿到这个锁谁就可以运行它所控制的那段代码。当有一个明确的对象作为锁时,就可以这样写程序,但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁:

class Foo implements Runnable

{

private byte[] lock= new byte[0];//特殊的instance变量

Public void methodA()

{

synchronized(lock){//…}

}

//…..

}

注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock= new Object()则需要7行操作码。

3.将synchronized作用于static函数,示例代码如下:

Class Foo

{

public synchronized static void methodAAA()//同步的static函数

{

//….

}

public void methodBBB()

{

synchronized(Foo.class)// class literal(类名称字面常量)

}

}

代码中的methodBBB()方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。

记得在《Effective Java》一书中看到过将 Foo.class和 P1.getClass()用于作同步锁还不一样,不能用P1.getClass()来达到锁这个Class的目的。P1指的是由Foo类产生的对象。

可以推断:如果一个类中定义了一个synchronized的static函数A,也定义了一个synchronized的instance函数B,那么这个类的同一对象Obj在多线程中分别访问A和B两个方法时,不会构成同步,因为它们的锁都不一样。A方法的锁是Obj这个对象,而B的锁是Obj所属的那个Class。

java 同步机制是什么

要跨线程维护正确的可见性,只要在几个线程之间共享非 final变量,就必须使用 synchronized(或 volatile)以确保一个线程可以看见另一个线程做的更改。

为了在线程之间进行可靠的通信,也为了互斥访问,同步是必须的。这归因于java语言规范的内存模型,它规定了:一个线程所做的变化何时以及如何变成对其它线程可见。

因为多线程将异步行为引进程序,所以在需要同步时,必须有一种方法强制进行。例如:如果2个线程想要通信并且要共享一个复杂的数据结构,如链表,此时需要确保它们互不冲突,也就是必须阻止B线程在A线程读数据的过程中向链表里面写数据(A获得了锁,B必须等A释放了该锁)。

为了达到这个目的,java在一个旧的的进程同步模型——监控器(Monitor)的基础上实现了一个巧妙的方案:监控器是一个控制机制,可以认为是一个很小的、只能容纳一个线程的盒子,一旦一个线程进入监控器,其它的线程必须等待,直到那个线程退出监控为止。通过这种方式,一个监控器可以保证共享资源在同一时刻只可被一个线程使用。这种方式称之为同步。(一旦一个线程进入一个实例的任何同步方法,别的线程将不能进入该同一实例的其它同步方法,但是该实例的非同步方法仍然能够被调用)。

java中同步和异步有什么异同

Java中交互方式分为同步和异步两种:

相同的地方:

都属于交互方式,都是发送请求。

不同的地方:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

扩展资料:

Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现均支持Java applet

Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。

当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢?

Java语言其实最早诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。

参考资料:java基础百度百科

好了,文章到此结束,希望可以帮助到大家。

什么叫javac javac是什么java 方法上的锁是什么锁 java中的锁有哪几种