并发编程之对象的共享
本篇文章介绍对象的共享,内容皆总结摘抄自《Java并发编程实战》和《Java并发编程的艺术》,仅作笔记。
同步代码块和同步方法可以确保以原子的方式执行操作,而synchronized不仅可以用于实现原子性或确定临界区,它还可以保证内存可见性。我们不仅希望防止某个线程在使用对象状态时而另一个线程在修改该状态,还希望确保当一个线程修改了对象状态后,其他线程能看到发生的状态变化。
可见性
可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变量写入值,然后在没有其他写入操作的情况下读取这个变量,总能得到相同的值。然而当读操作和写操作在不同的线程中执行时,情况却并非如此。通常,我们无法确保执行读操作的线程能适时的看到其他线程写入的值。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。
以下代码说明了当多个线程在没有同步的情况下共享数据时出现的错误。
public class MultiThread {private static boolean ready;private static int number;public static void main(String[] args) {new ReaderThread().start();number = 22;ready = true;}private static class ReaderThread extends Thread{public void run(){while(!ready){Thread.yield();}System.out.println(number);}}
}
主线程和读线程都将访问共享变量ready和number。主线程启动读线程,然后将number设为22,并将ready设为true。读线程一直循环直到发现ready的值变为true,然后输出numer的值。虽然看起来会输出22,但也有可能输出0,或者无法终止。
以上程序可能会有以下三种结果:
- 输出22,此结果也就是按照程序正常执行的结果。
- 无法终止,因为读线程可能永远没有看到主线程修改的ready的值,因为在代码中没有使用足够的同步机制,因此无法保证主线程写入的ready值和numer值对读线程来说是可见的。
- 0,读线程可能看到了主线程修改的ready的值但没有看到在之后修改的number的值,因为修改num与修改ready没有数据依赖关系,因此编译器可能会重排序。
上述程序展示了在缺乏同步的程序中可能产生错误结果的一种情况:失效数据。当多线程查看ready变量时,可能会得到一个失效的值。除非在每次访问变量时都使用同步,否则很可能获得该变量的一个失效值。而且由于重排序的存在,可能会发生一个线程得到了某个变量的最新值,而得到了另一个变量的失效值。
当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值。这种安全性保证也被称为最低安全性。最低安全性适用于绝大多数变量,但不适用于非volatile类型的64位数值变量(即double类型和long类型)。JMM要求,变量的读取操作和写入操作都必须是原子操作,而对于非volatile类型的double和long变量,JVM允许将64位的读操作或写操作分解为两个32位的操作。
当读取一个非volatile类型的long变量或double变量时,如果对该变量的读操作和写操作在不同的线程中执行,那么很可能读取到某个值的高32位和另一个值的低32位。因此,在多线程程序中使用共享且可变的long和double类型的变量是不安全的,除非用volatile来声明或用锁保护起来。
内置锁可以用于确保某个线程以一种可预测的方式来查看另一个线程的执行结果。即当线程A执行某个同步代码块时,线程B随后进入同一个代码块,当线程B执行该代码块时,线程A之前在此代码块中的所有操作结果对线程B都是可见的。如果没有同步,就无法实现上述保证。
加锁的含义不仅仅局限于互斥行为,还包括内存可见性。为了确保所有线程都能看到共享变量的最新值,所有执行读操作和写操作的线程都必须在同一个锁上。
Volatile变量
Java语言提供了一种稍弱的同步机制,即volatile变量,用于确保共享变量的更新操作通知到了其他线程。除了保证可见性,volatile还禁止重排序优化,即volatile修饰的变量上的操作不会与其他内存操作一起重排序。
当写一个volatile变量时,JMM会把该线程对应的本地内存中得共享变量刷新到主内存。当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。
虽然volatile变量很方便,但也存在一些局限性。volatile变量通常用作某个操作完成、发生中断或状态的标志。虽然volatile也可以用于表示其他的状态信息,但在使用时需要非常小心,因为volatile只能确保可见性,无法保证原子性。例如递增操作count++中,即使count使用volatile修饰也只能保证count的修改对其他线程可见,无法保证多个线程同一时间重复执行导致count的值出现偏差。与volatile变量只能确保可见性相比,加锁机制既可以确保可见性又保证原子性。
当且仅当满足以下所有条件时,才应该使用volatile变量:
- 对变量的写入操作不依赖变量的当前值,或者确保只有单个线程更新变量的值;
- 该变量不会与其他状态变量一起纳入不变性条件中;
- 在访问变量时不需要加锁。
发布与逸出
“发布(publish)”一个对象的意思是指使对象能够在当前作用域之外的代码中使用。例如,将一个指向该对象的引用保存到其他代码可以访问的地方或者在某一个非私有方法中返回该引用等等。在许多情况下,我们要保证对象及其内部状态不被发布。而在某些情况下,我们又需要发布某个对象,但如果在发布时要确保线程安全,则可能需要同步。发布内部状态可能会破坏封装性,并使得程序难以维持不变性条件,例如在对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就称为逸出(Escape)。
发布对象最简单的方法就是将对象的引用保存到一个公有的静态变量中,以便任何类和线程都能看到该对象。当发布一个对象时,在该对象的非私有域中引用的所有对象同样会被发布。一般来说,如果一个已经发布的对象能够通过非私有的变量引用和方法调用达到其他的对象,那么这些对象都会被发布。
线程封闭
当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步,这种技术称为线程封闭(Thread Confinement)。它是实现线程安全性的最简单方式之一。当某个对象封闭在一个线程中时,这种用法将自动实现线程安全性,即使被封闭的对象本身不是线程安全的。
线程封闭技术的一种常见应用是JDBC的Connection对象。JDBC规范并不要求Connection对象必须是线程安全的(连接池是线程安全的,连接池通常会由多个线程同时访问)。在典型的服务器应用程序中,线程从连接池获得一个Connection对象,并且用该对象来处理请求,使用完后再将对象返回给连接池。由于大多数请求都是由单个线程采用同步的方式来处理,并且在Connection对象返回之前,连接池不会再将它分配给其他线程,因此这种连接管理模式在处理请求时隐含的将Connection对象封闭在线程中。
在Java语言中无法强制将对象封闭在某个线程中。线程封闭是在程序设计中的一个考虑因素,必须在程序中实现。Java语言及其核心库提供了一些机制来帮助维持线程封闭性,例如局部变量和ThreadLocal类,即便如此,我们仍然需要负责确保封闭在线程中的对象不会从线程中逸出。
Ad-hoc线程封闭
Ad-hoc线程封闭是指维护线程封闭性的职责完全由程序实现来承担。Ad-hoc线程封闭是非常脆弱的,因为没有任何一种语言特性,例如可见性修饰符或局部变量,能将对象封闭到目标线程上。
由于Ad-hoc线程封闭技术的脆弱性,因此在程序中尽量少用,在可能的情况下,应该使用更强的线程封闭技术。
栈封闭
栈封闭是线程封闭的一种特例,在栈封闭中,只能通过局部变量才能访问对象。正如封装能使得代码更容易维持不变性条件,同步变量也能使对象更易于封闭在线程中。局部变量的固有属性之一就是封闭在执行线程中,它们位于执行线程的栈中,其他线程无法访问这个栈。栈封闭比Ad-hoc线程封闭更易于维护,也更加健壮。
对于基本类型的局部变量,由于任何方法都无法获得对基本类型的引用,因此Java的这种语义确保了基本类型的局部变量始终封闭在线程内。例如下面代码中的count,无论如何都不会破坏栈封闭性。
public static int loadTheArk(List<Integer> intList){SortedSet<Integer> intSet;int count = 0;Integer num = null;intSet = new TreeSet<Integer>();intSet.addAll(intList);for (Integer number:intSet){count++;if (number % 2 == 0){num = 0;} else {num = number;}System.out.println(num);}return count;
}
而对于维护对象引用的栈封闭性时,我们就需要多做一些工作以确保被引用的对象不会逸出。例如在loadTheArk实例化一个TreeSet对象,并将指向该对象的一个引用保存到inSet中。此处只有一个引用指向集合inSet,这个引用被封闭在局部变量中,因此也被封闭在执行线程中。但如果发布了集合intSet的引用,那么封闭性就被破坏,并且导致了intSet的逸出。
如果在线程内部上下文中使用非线程安全的对象,该对象仍然是安全的。然而只有写这段代码的人才知道哪些对象需要封闭到线程中,以及被封闭的对象是否是线程安全的。这样的代码维护性很差,换一个人维护就很容易错误的使对象逸出。
ThreadLocal类
维护线程封闭的一种更规范方式是使用ThreadLocal,这个类能使线程中的某个值与保存值的对象关联起来。ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程都存有一份独立的副本,因此get总是返回由当前执行线程在调用set时设置的最新值。
不变性
满足同步需求的另一种方法是使用不可变对象。如果某个对象在被创建后其状态就不能被修改,这个对象就称为不可变对象。线程安全性是不可变对象的固有属性之一,因此它们一定是线程安全的。
不可变对象很简单,它们只有一种状态,并且该状态由构造函数来控制。在程序设计中,一个最困难的地方就是判断复杂对象的可能状态,然而判断不可变对象的状态却很简单。
在Java语言规范和JMM中都没有给出不可变的正式定义,但不可变性不等于将对象的所有域都声明为final类型,即使对象中所有的域都是final的,这个对象仍然是可变的,因为在final的域中可以保存对可变对象的引用。
只有满足以下条件时,对象才是不可变的:
- 对象创建以后其状态就不能修改;
- 对象的所有域都是final类型;
- 对象是正确创建的,即this引用没有逸出。
final域
关键字final用于构造不可变对象,final类型的域是不可修改的(如果final域所引用的对象是可变的,那么引用对象是可以修改的)。在JMM中,final还能够确保初始化过程的安全性,从而可以不受限制的访问不可变对象,并在共享这些对象时无需同步。
安全发布
到目前为止,我们重点讨论的是如何确保对象不被发布,例如让对象封闭在线程或另一个对象内部。在某些情况下我们希望在多个线程间共享对象,此时必须确保安全的进行共享。然而如果像如下代码中将对象引用保存到公有域中,还不足以安全的发布这个对象。
public Holder holder;public void initialize(){holder = new Holder(1);
}
由于存在可见性问题,其他线程看到的Holder对象将处于不一致状态,即使在该对象的构造函数中已经正确的构建了不变性条件。这种不正确的发布导致其他线程看到尚未创建完成的对象。由于没有使用同步来确保Holder对象对其他线程可见,因此将Holder称为“未被正确发布”。在未被正确发布的对象中存在两个问题。首先除了发布对象的线程外,其他线程看到的Holder域可能是一个失效值,即看到一个空引用或之前的旧值。更糟糕的情况是,线程看到的Holder引用的值是最新的,但Holder状态的值却是失效的。
如果没有足够的同步,当在多个线程间共享数据时将发生一些非常奇怪的事情。
不可变对象与初始化安全性
JMM为不可变对象的共享提供了一种特殊的初始化安全性保证。即使某个对象的引用对于其他线程来说是可见的,也不意味着对象状态对于使用该对象的线程来说一定是可见的。为了确保对象状态能呈现出一致的视图,就必须使用同步。而在发布不可变对象的引用时没有使用同步也仍然可以安全的访问该对象。
在没有额外同步的情况下,也可以安全的访问final类型的域。然而如果final类型的域指向的是可变对象,那么在访问这些域所指向的对象状态时仍然需要同步。
安全发布的常用模式
可变对象必须通过安全的方式来发布,即在发布和使用该对象的线程时都必须使用同步。要安全的发布一个对象,对象的引用和对象的状态必须同时对其他线程可见。一个正确构造的对象可以通过一下方式来安全的发布:
- 在静态初始化函数中初始化一个对象引用。
- 将对象的引用保存到volatile类型的域或AtomicReferance对象中。
- 将对象的引用保存到某个正确构造对象的final类型域中。
- 将对象的引用保存到一个由锁保护的域中。
如果线程A将对象x放入一个线程安全的容器,随后线程B读取这个对象,可以确保B看到A设置的x状态,即使在这段读写x的代码中没有显式的同步。
通常,要发布一个静态构造对象,最简单和最安全的方式是使用静态的初始化器:
public static Holder holder = new Holder(1);
静态初始化器由JVM在类的初始化结果执行,由于JVM内部存在同步机制,因此通过这种方式初始化的任何对象都可以被安全的发布。
事实不可变对象
如果对象在发布后就不会被修改,那么对于其他在没有额外同步的情况下安全的访问这些对象的线程来说,安全发布是足够的。所有的安全发布机制都能确保,当对象的引用对所有访问该对象的线程可见时,对象发布时的状态对于所以线程也将是可见的,并且如果对象不再改变,就足以确保任何访问都是安全的。
如果对象从技术上来看是可变的,但其状态在发布后不会再改变,这种对象称为“事实不可变对象(Effectively Immutable Object)”。这些对象不需要满足之前介绍过的不可变性的严格定义。在这些对象发布后,程序只需将它们视为不可变对象即可。
例如Date本身是可变的,但如果将它作为不可变对象使用,在多个线程间共享Date对象时,就可以省去对锁的使用。假设需要维护一个Map对象,其中保存了每位用户的最近登录时间:
public Map<String,Date> lastLogin = Collections.synchronizedMap(new HashMap<String, Date>());
如果Date对象的值中被放入Map后就不会改变,那么synchronizedMap中的同步机制就足以使Date值被安全的发布,并且在访问这些Date值时不需要额外的同步。
可变对象
如果对象在构造后可以修改,那么安全发布只能确保“发布当时”状态的可见性。对于可变对象,不仅在发布对象时需要使用同步,在每次对象访问时同样需要使用同步来确保后续修改操作的可见性。要安全的共享可变对象,这些对象就必须被安全的发布,并且必须是线程安全的或者由某个锁保护起来。
对象的发布需求取决于它的可变性:
- 不可变对象可以通过任意机制发布。
- 事实不可变对象必须通过安全方式来发布。
- 可变对象必须通过安全方式来发布,并且必须是线程安全的或者由某个锁保护起来。
安全的共享对象
在并发程序中使用和共享对象时,可以使用一些使用的策略,例如:
- 线程封闭。线程封闭的对象只能由一个线程拥有,对象被封闭在该线程中,并且只能由这个线程修改。
- 只读共享。在没有额外同步的情况下,共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它。共享的只读对象包括不可变对象和事实不可变对象。
- 线程安全共享。线程安全的对象在其内部实现同步,因此多个线程可以通过对象的公有接口来进行访问而不需要进一步的同步。
- 保护对象。被保护的对象只能通过特有的锁来访问。保护对象包括封装在其他线程安全对象中的对象以及已发布的并且由某个特定锁保护的对象。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Java网络编程之Socket和ServerSocket详解
Socket Socket是实现客户端套接字的类,套接字是两台计算机之间进行通信的端点。 Socket的实际工作由SocketImpl类的实例执行 。通过更改用于创建套接字实现的套接字工厂,应用程序可以配置自身以创建适合于本地防火墙的套接字。 常用API详解: 获取方法: //创建一个未连接的套…...
2024/5/4 16:19:52 - HTML内嵌Markdown编辑器
实现步骤 1、获取markdown的开源库,这里用的是开源项目showdown。 将showdown.min.js和showdown-table.min.js(用于支持表格转换)拷贝到项目中,还有其他的扩展,按需下载。showdown: https://github.com/showdownjs/showdown showdown-table: https://github.com/showdownj…...
2024/5/4 13:59:42 - 背包问题
0/1背包(拿与不拿是个问题) 问题: 有一个容量为M的背包,有N件物品,C1、C2…CN表示物体的价值,W1、W2…WN表示物体所占空间大小,求如何拿物品可以使得背包价值最大。 思路: dp[i][j]表示最终所拿到的价值,i表示第i个物品,j表示背包容量 c[i]表示第i个物品的价值 w[i]表…...
2024/4/23 16:13:34 - 树莓派4B:编译安装OpenCV3.4.7 (使用源码形式进行编译安装)
一、环境介绍开发板:树莓派4BOpenCV版本: 3.4.9操作系统:开发板原始自带的32位操作系统pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linuxpi@raspberrypi:~ $ cat /proc/version Linux version 4.19.97-…...
2024/4/23 16:13:37 - 【激光雷达点云障碍物检测】cluster3d.cpp、cluster3d.h
自己理解的注释。cluster3d.h#ifndef PLAYBACK_CLUSTER3D_H #define PLAYBACK_CLUSTER3D_H #include <pcl/common/common.h> #include <chrono> #include <string> #include "kdtree3d.h"namespace lidar_obstacle_detection {// shorthand for po…...
2024/4/23 16:13:32 - cv2.VideoCapture.get()用法
param define cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位 cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引 cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结…...
2024/4/25 6:10:35 - Python如何安装pyaudio
我们在安装pyaudio时很多情况下,IDE会报错,原因似乎是因为C语言库没有安装,那我们应该怎样配置pyaudio呢1.安装whl库 我们可以来到Github代码托管上面安装所需要的安装包 github安装包然后点击下载 2.打开command 打开下载页面,使用Ctrl+L,然后输入cmd,会出现以下界面输入…...
2024/4/16 23:15:12 - maven配置阿里云源
maven构建项目默认使用的源在国外,在下载jar的时候,速度堪忧,一般为了提速,我们会配置为国内源,而国内源中数豆瓣和阿里云的源比较快。这里就设置为阿里云源。配置文件就是maven安装目录的conf/settings.xml文件。我们编辑该文件,找到mirrors这一部分,取消第一个mirror的…...
2024/4/23 16:13:36 - Spring注解驱动-声明式事务(六)
1.环境搭建在pom.xml里加入数据库连接驱动和spring-jdbc的依赖。<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version> </dependency> <dependency><group…...
2024/4/23 16:13:37 - puppeteer在windows环境下的下载安装
1. Node.js的下载/安装进入官网:https://nodejs.org/zh-cn/点击下载然后一路next直到安装完毕即可。以管理员方式运行cmd,输入命令 node -v显示版本信息则说明安装成功2. puppeteer的下载安装先创建一个本地文件夹puppeteer,然后使用cmd打开这个文件夹所在位置,再执行如下两…...
2024/4/23 16:13:28 - 虚拟机virtualenv基本操作和解决每次打开pycharm都直接进入项目的问题
虚拟机virtualenv基本操作和解决每次打开pycharm都直接进入项目的问题 一、virtualenv的一些基本操作 查看系统是否安装了virtualenv 1|virtualenv --version创建虚拟环境命令: 2|mkvirtualenv 虚拟环境名进入虚拟环境工作: 1|workon 虚拟环境名查看机器上有多少个虚拟环境:…...
2024/4/23 16:13:29 - es(7.6.1版本)创建客户端及连接使用
一、初始化es客户端 package com.zh.jg.es;import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; impor…...
2024/4/23 16:13:32 - Codeforces Round #621 (Div. 1 + Div. 2) Feb/17/2020 23:35UTC+8
@toc 比赛链接 比赛记录 https://blog.csdn.net/cheng__yu_/article/details/105395197 A. Cow and Haybales题意:移动d次使第一堆最高,求最高 #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=2e5+10,inf=1e9;int t,n,d,a[maxn]…...
2024/4/23 16:13:24 - 包子笔记 - 赚钱效率
时间:2019-10-16 07:58:35既然提起赚钱的效率,那就顺便说下“效率”我上学时,成绩始终不错,却也不算顶尖,一般达不到年级前三。很多年以后,我才明白其中原因。一个当然是智力因素,我的智力也就马马虎虎、平淡无奇,离顶尖其实差很多。另一个重要原因,则是我一直太过追求…...
2024/4/23 16:13:30 - scala-Map
可变和不可变的Map都叫Map,不像Array和ArrayBuffer一样名字不一样,默认用不可变,所以声明可变时一定要带包名。 inmuable的map没有put方法,也不能用 += scala.collection.mutable可以用put,也可以用 +=,但经过亲测,put的时候要用逗号分隔,因为是以参数列表的形式,+=时…...
2024/4/16 23:14:54 - windows更改全局包安装路径后,无法使用全局安装包
修改全局包安装路径 npm config set prefix "D:\software\nodejs\node-global" npm config set cache "D:\software\nodejs\node-cache"安装路径可以设置成自己的路径 这样一来你的npm全局包安装路径就设置好了,接下来我们用npm随便全局安装一个包,例如:…...
2024/4/16 23:14:42 - C#设计模式
C#设计模式...
2024/5/4 15:37:11 - 设计模式系列--原型&建造者
原型模式与建造者模式都属于创建型的模式,也是比较常见的模式。1. 原型模式 原型模式常常用于复杂对象的复制,常常将需要用到原型模式的类设计成 Cloneable,这种方式实现的事浅克隆。如果需要实现深克隆,则需要将其成员对应的类也设计成 Cloneable,并进行递归,这种方式比…...
2024/4/15 7:36:21 - 系统的输入与输出
1.系统的输入输出 [root@localhost ~]# dd if=/dev/zero of=/mnt/file bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 16.6429 s, 63.0 MB/s[root@localhost ~]# rm -fr file [root@localhost ~]# dd if=/dev/zero of=/dev/shm/fi…...
2024/4/16 23:15:18 - github搜索开源项目技巧
搜索名字里带关键词spring boot , star大于3000: in:name spring boot stars:>3000在项目详情readme中搜索 in:readme spring boot stars:>1500在描述里搜,语言为java, 更新时间 in:description 微服务 language:java pushed:>2020-01-01然后去看一下项目描述是否符合…...
2024/4/26 18:11:37
最新文章
- 无极花 专业韩语 朝鲜语网站建设
无极花 https://www.wujihua.com 无极花建站 - 始于2016年,专业的韩语、朝鲜语网站开发团队,从事网页设计、网站开发、网站托管、网站维护、网站推广、搜索引擎SEO优化等服务。...
2024/5/4 17:08:34 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Spring学习(四)反射、AOP、JUnit
文章目录 Java反射回顾 AOP代理模式AOP概念及术语概述术语作用 基于注解的AOP步骤依赖配置文件切入点表达式语法切面类重用切入点表达式切面的优先级 基于XML的AOP 单元测试JUnit引入依赖JUnit5 Java反射 Spring框架的IoC基于java反射机制实现,反射是指在运行状态中…...
2024/5/3 23:35:32 - 巨控科技新品发布:全方位升级,引领智能控制新纪元
标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域,巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日,巨控科技再次以其行业领先的研发实力,推出了三大系列的新产品,旨在为各行各业提供更…...
2024/5/1 13:03:39 - [C++/Linux] UDP编程
一. UDP函数 UDP(用户数据报协议,User Datagram Protocol)是一种无连接的网络协议,用于在互联网上交换数据。它允许应用程序发送数据报给另一端的应用程序,但不保证数据报能成功到达,也就是说,它…...
2024/5/3 8:59:07 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57