当前位置: 首页 > news >正文

江苏建设会计学会网站有可以做ssgsea的网站么

江苏建设会计学会网站,有可以做ssgsea的网站么,爱墙 网站怎么做,全国企业信息查询系统入口官网文章目录 前言一、synchronized关键字通用在下面四个地方#xff1a;1.1synchronized修饰实例方法1.2synchronized修饰静态方法#xff1a;1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3… 文章目录 前言一、synchronized关键字通用在下面四个地方1.1synchronized修饰实例方法1.2synchronized修饰静态方法1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3可重入 三.同步互斥访问3.1同步互斥访问3.2Java中实现同步互斥访问的方法3.3Java中为什么要提供两种同步器synchronized 和 Lock 总结 前言 提示这里可以添加本文要记录的大概内容 在Java当中synchronized通常是用来标记一个方法或者代码块。在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个线程执行被synchronized修饰的方法或者代码块。因此被synchronized修饰的方法或者代码块不会出现数据竞争的情况也就是说被synchronized修饰的代码块是并发安全的。 提示以下是本篇文章正文内容下面案例可供参考 一、synchronized关键字通用在下面四个地方 1.1synchronized修饰实例方法 public class SynchronizedExample {// 实例变量private int count 0;// 同步实例方法public synchronized void increment() {// 在多线程环境中只有一个线程能够进入这个方法count;}// 非同步方法public void nonSynchronizedMethod() {// 这个方法没有使用 synchronized 关键字多个线程可以同时访问}public static void main(String[] args) {SynchronizedExample example new SynchronizedExample();// 创建多个线程同时访问同一个实例的 synchronized 方法Thread thread1 new Thread(() - {for (int i 0; i 5; i) {example.increment();System.out.println(Thread 1 - Count: example.getCount());}});Thread thread2 new Thread(() - {for (int i 0; i 5; i) {example.increment();System.out.println(Thread 2 - Count: example.getCount());}});// 启动线程thread1.start();thread2.start();}// 获取 count 的方法public int getCount() {return count;} } increment 方法使用 synchronized 关键字修饰确保在同一时间内只有一个线程可以进入该方法防止多线程并发访问导致数据不一致。 nonSynchronizedMethod 方法没有使用 synchronized 关键字因此多个线程可以同时访问可能导致竞态条件race condition和数据不一致。 main 方法中创建了两个线程分别调用 increment 方法来递增 count 变量。 getCount 方法用于获取 count 的值。 1.2synchronized修饰静态方法 当 synchronized 修饰静态方法时它锁定的是整个类而不是实例。这意味着在同一时间内只有一个线程能够访问该静态方法无论创建了多少个类实例。以下是一个使用 synchronized 修饰静态方法的简单示例 public class SynchronizedStaticExample {// 静态变量private static int count 0;// 静态同步方法public static synchronized void increment() {// 在多线程环境中只有一个线程能够进入这个静态方法count;}// 非同步方法public void nonSynchronizedMethod() {// 这个方法没有使用 synchronized 关键字多个线程可以同时访问}public static void main(String[] args) {SynchronizedStaticExample example1 new SynchronizedStaticExample();SynchronizedStaticExample example2 new SynchronizedStaticExample();// 创建多个线程同时访问同一个静态方法Thread thread1 new Thread(() - {for (int i 0; i 5; i) {example1.increment();System.out.println(Thread 1 - Count: example1.getCount());}});Thread thread2 new Thread(() - {for (int i 0; i 5; i) {example2.increment();System.out.println(Thread 2 - Count: example2.getCount());}});// 启动线程thread1.start();thread2.start();}// 获取 count 的方法public int getCount() {return count;} } increment 方法使用 synchronized 关键字修饰确保在同一时间内只有一个线程可以进入该静态方法。 nonSynchronizedMethod 方法没有使用 synchronized 关键字因此多个线程可以同时访问可能导致竞态条件race condition和数据不一致。 main 方法中创建了两个类实例但由于 increment 方法是静态的它们共享同一个静态方法因此在同一时间内只有一个线程能够访问。 getCount 方法用于获取静态变量 count 的值。 1.3synchronized修饰实例方法的代码块 当 synchronized 修饰实例方法时它锁定的是对象实例确保在同一时间内只有一个线程能够访问该方法。如果有多个实例每个实例都有独立的锁。以下是一个使用 synchronized 修饰实例方法的简单示例 public class SynchronizedInstanceExample {// 实例变量private int count 0;// 同步实例方法public synchronized void increment() {// 在多线程环境中只有持有当前对象实例锁的线程能够进入这个方法count;}// 非同步方法public void nonSynchronizedMethod() {// 这个方法没有使用 synchronized 关键字多个线程可以同时访问}public static void main(String[] args) {SynchronizedInstanceExample example1 new SynchronizedInstanceExample();SynchronizedInstanceExample example2 new SynchronizedInstanceExample();// 创建多个线程同时访问同一个实例方法Thread thread1 new Thread(() - {for (int i 0; i 5; i) {example1.increment();System.out.println(Thread 1 - Count: example1.getCount());}});Thread thread2 new Thread(() - {for (int i 0; i 5; i) {example2.increment();System.out.println(Thread 2 - Count: example2.getCount());}});// 启动线程thread1.start();thread2.start();}// 获取 count 的方法public int getCount() {return count;} } increment 方法使用 synchronized 关键字修饰确保在同一时间内只有持有当前对象实例锁的线程能够进入该方法。 nonSynchronizedMethod 方法没有使用 synchronized 关键字因此多个线程可以同时访问可能导致竞态条件race condition和数据不一致。 main 方法中创建了两个类实例每个实例都有独立的锁因此它们的 increment 方法互不影响。 getCount 方法用于获取实例变量 count 的值 1.4synchronized修饰静态方法的代码块 当 synchronized 修饰静态方法时它锁定的是类的 Class 对象确保在同一时间内只有一个线程能够访问该静态方法。以下是一个使用 synchronized 修饰静态方法的简单示例 public class SynchronizedStaticExample {// 静态变量private static int count 0;// 静态同步方法public static synchronized void increment() {// 在多线程环境中只有一个线程能够进入这个静态方法count;}// 非同步方法public void nonSynchronizedMethod() {// 这个方法没有使用 synchronized 关键字多个线程可以同时访问}public static void main(String[] args) {SynchronizedStaticExample example1 new SynchronizedStaticExample();SynchronizedStaticExample example2 new SynchronizedStaticExample();// 创建多个线程同时访问同一个静态方法Thread thread1 new Thread(() - {for (int i 0; i 5; i) {SynchronizedStaticExample.increment();System.out.println(Thread 1 - Count: SynchronizedStaticExample.getCount());}});Thread thread2 new Thread(() - {for (int i 0; i 5; i) {SynchronizedStaticExample.increment();System.out.println(Thread 2 - Count: SynchronizedStaticExample.getCount());}});// 启动线程thread1.start();thread2.start();}// 获取 count 的方法public static int getCount() {return count;} } increment 方法使用 synchronized 关键字修饰确保在同一时间内只有一个线程能够进入该静态方法。 nonSynchronizedMethod 方法没有使用 synchronized 关键字因此多个线程可以同时访问可能导致竞态条件race condition和数据不一致。 main 方法中创建了两个类实例但由于 increment 方法是静态的它们共享同一个静态方法因此在同一时间内只有一个线程能够访问。 getCount 方法用于获取静态变量 count 的值。 2.读入数据 代码如下示例 data pd.read_csv(https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv) print(data.head())该处使用的url网络请求的数据。 二.Sychronized关键特性 2.1互斥 synchronized 会起到互斥效果, 某个线程执行到某个对象的 synchronized 中时, 其他线程如果也执行到同一个对象 synchronized 就会阻塞等待. 进入 synchronized 修饰的代码块, 相当于 加锁 退出 synchronized 修饰的代码块, 相当于 解锁 2.2 刷新内存 synchronized 的工作过程: 获得互斥锁从主内存拷贝变量的最新副本到工作的内存执行代码将更改后的共享变量的值刷新到主内存释放互斥锁 2.3可重入 看到的这个例子很形象 在 Java 中synchronized 关键字具有可重入性这意味着如果一个线程已经获得了某个对象的锁那么它可以再次请求该对象的锁而不会被阻塞。可重入性使得同一个线程在执行一个方法或代码块时可以再次进入同步锁定的代码区域而不会被自己已经持有的锁所阻塞。 这种机制是为了防止由于递归调用或者方法内部调用其他同步方法而导致的死锁。如果不支持可重入性那么在同一线程中多次调用同步方法就会因为持有同一个锁而产生死锁。 public class ReentrantExample {public static void main(String[] args) {ReentrantExample example new ReentrantExample();example.outerMethod();}public synchronized void outerMethod() {System.out.println(Outer Method);innerMethod();}public synchronized void innerMethod() {System.out.println(Inner Method);} } 三.同步互斥访问 3.1同步互斥访问 在多线程编程中通常会有多个线程同时访问一个资源的情况同步互斥访问就是在同一时间只能有一个线程对同一资源进行访问。 3.2Java中实现同步互斥访问的方法 同步互斥访问的解决办法是设计一个同步器对多个线程同时访问同一个共享、可变资源的情况这个资源我们称之其为临界资源这种资源可能是 对象、变量、文件等 同步器采用的方案都是序列化访问临界资源。即在同一时刻只能有一个线程访问临 界资源。 共享资源可以由多个线程同时访问。 可变资源可以在其生命周期内被修改。 Java中目前有 synchronized 和 Lock ReentrantLock。 3.3Java中为什么要提供两种同步器synchronized 和 Lock synchronized在1.5版本时的状况这是因为在jdk1.5版本的时候jdk官方就提供出了 synchronized 锁但是在1.5版本的时候synchronized 锁的加锁方式只有一个就是通过内部对象Monitor(监视器锁)实现基于进入与退出Monitor对象实现方法与代码块同步监视器锁的实现依赖底层操作系统的Mutex lock互斥锁实现它是一个重量级锁性能较低也就是比较消耗性能。 Lock锁的出现由于 synchronized 锁的性能不大好加的锁都是重要级别的锁涉及到线程之间的状态切换要从用户态切换到内核态所以就有一个人设计了Lock锁在当时Lock锁的性能要比 synchronized 好很多。 synchronized锁的优化后来jdk官方就对synchronized锁进行了优化成了现在这个样子我感觉真的基本和Lock差不多了。 总结 好了今天的blog就到此为止期待大佬们的三连和评论
http://www.w-s-a.com/news/628652/

相关文章:

  • 门户网站的种类php网站开发实训心得
  • 流程图制作网页网络优化seo
  • 个人公益网站怎么制作wordpress flat theme
  • 做营销型网站的公司篇高端网站愿建设
  • 五莲网站建设维护推广凡科做网站的方法
  • 山东省住房建设厅网站首页网站文章更新怎么通知搜索引擎
  • 商务网站的可行性分析包括大流量网站 优化
  • 推广网站有效的方法网站数据统计
  • 自建视频网站WordPress数据库添加管理员
  • 新民电商网站建设价格咨询网站建设高效解决之道
  • 做网站需要哪些步骤网站设计介绍
  • 物流网站制作目的国外中文网站排行榜单
  • 苏州网站建设招标网站ftp的所有权归谁
  • 未央免费做网站河间网站建设
  • 酒庄企业网站app制作多少钱一个
  • 西安模板建网站网站如何做直播轮播
  • 网站功能需求表百度怎么投放自己的广告
  • 如何免费制作网站网站icp备案费用
  • 网站建设最新教程wordpress表白墙
  • android电影网站开发网站建设与设计实习报告
  • 公司汇报网站建设方案烟台seo网站推广
  • 文章网站哪里建设好找素材的网站
  • 怎么做自己的彩票网站公司建设网站价格
  • 国外比较好的设计网站网站后台无法上传图片
  • 帮别人做网站的公司是外包吗用户登录
  • 关于我们网站模板小莉帮忙郑州阳光男科医院
  • 上海门户网站怎么登录永州网站制作
  • 微信网站模版下载做销售的去哪个网站应聘
  • 好看的个人博客主页长安网站优化公司
  • 企业网站关站大型综合新闻门户网站织梦模板