首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

Java并发程编程艺术》重点总结

synchronized修饰的代码块同步执行,不在synchronized块中的代码会异步执行,因此推荐用同步代码块,而非同步整个方法。 synchronized修饰同步方法和代码块,一定是排队运行的(线程独占)。 多线程访问“共享变量”,才需要加同步。 同步不能继承。 当一个线程执行的代码出现异常,其持有的锁会自动释放。 synchronized加到static方法上是给Class类上锁。 synchronized加到实例方法上,是给对象上锁。 String常量池缓存,synchronized代码块加锁一般不使用String。 synchronized代码块具有volatile同步变量到主内存的功能。 wait()和notify()都是在同步方法、代码块中使用。 执行notify()后不会立即释放对象锁,等执行完synchronized代码块才释放,然后其他wait状态的线程才可以获得该对象锁。 线程间通信,可使用管道字节流、管道字符流;建立通信的管道两端,都是阻塞的,即写端无写入时,读端将会阻塞。类似于 Linux进程通信的pipe。 PipeInputStream/PipeOutputStream PipeReader/PipeWriter ReentrantReadWriteLock 具有读和写两个锁;读读共享锁、写写排他锁、读写排他锁(有写 就互斥)。

优秀的个人博客,低调大师

Java 遍历Map集合的各种姿势

最常用,在键值都需要时使用。 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } 在for-each循环中遍历keys或values。 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //遍历map中的键 for (Integer key : map.keySet()) { System.out.println("Key = " + key); } //遍历map中的值 for (Integer value : map.values()) { System.out.println("Value = " + value); } 使用Iterator遍历 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } Map map = new HashMap(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = (Map.Entry) entries.next(); Integer key = (Integer)entry.getKey(); Integer value = (Integer)entry.getValue(); System.out.println("Key = " + key + ", Value = " + value); } 通过键找值遍历(效率低) Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println("Key = " + key + ", Value = " + value);

优秀的个人博客,低调大师

阿里云OSS追加上传(java

场景描述:不断接收数据,将数据写入文件存放到OSS 方案: 1、接收到文件后写到本地,定期或实时覆盖上传到OSS 2、OSS追加上传 只贴2代码: public boolean writeFile(String content) { // 创建OSSClient实例 OSSClient ossClient = new OSSClient(ossConfig.getEndPoint(), ossConfig.getAccessKeyId(), ossConfig.getAccessKeySecret()); try { // 判断bucket是否存在 if (!ossClient.doesBucketExist(ossConfig.getBucketName())) { ossClient.createBucket(ossConfig.getBucketName());// 创建Bucket logger.info("Bucket {} 不存在,已创建。", ossConfig.getBucketName()); } // 判断当日目录是否存在 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date today = new Date(); String todayDirectoryName = ossConfig.getDirectory() + simpleDateFormat.format(today) + "/"; if (!ossClient.doesObjectExist(ossConfig.getBucketName(), todayDirectoryName)) { OSSUtil.createDirectory(ossClient, ossConfig.getBucketName(), todayDirectoryName); logger.info("目录 {} 不存在,已创建。", todayDirectoryName); } InputStream inputStream = new ByteArrayInputStream(content.getBytes()); // 按规则生成文件名 String deviceFileName = todayDirectoryName + 文件名 + ".txt"; // 从OSS取文件,读其大小 Long position = OSSUtil.getRemoteFileSize(ossClient, ossConfig.getBucketName(), deviceFileName); logger.debug("{} 写入位置 {}", deviceFileName, position); // 创建上传Object的Metadata,如不声明则写入OSS中文会乱码 ObjectMetadata meta = new ObjectMetadata(); meta.setContentType("text/plain; charset=utf-8"); ossClient.appendObject(new AppendObjectRequest(ossConfig.getBucketName(), deviceFileName, inputStream, meta).withPosition(position)); return true; } catch (Exception e) { logger.error("OSS文件写入异常", e); return false; } finally { ossClient.shutdown(); } } ~~~~

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册