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

河南省住房和城乡建设门户网站百度手机怎么刷排名多少钱

河南省住房和城乡建设门户网站,百度手机怎么刷排名多少钱,德州做网站哪家好,asp网站图片理解代码必备 参数中使用(String... keys) 在 Java 中,String… keys 这种语法被称为可变参数(Varargs),是 Java 5 引入的特性,用于简化方法参数的定义。它允许方法接收任意数量(包…

理解代码必备

  1. 参数中使用(String... keys)
    在 Java 中,String… keys 这种语法被称为可变参数(Varargs),是 Java 5 引入的特性,用于简化方法参数的定义。它允许方法接收任意数量(包括零个)的同一类型参数
    用此可变参数可以省去创建String[]数组的功夫,而且不写和写几个都行,更加灵活
    可变参数使用限制:
    一个方法只能有一个可变参数
    可变参数必须是方法的最后一个参数
  2. 对于CountDownLatch的使用
    CountDownLatch 是 Java 并发包(java.util.concurrent)中的一个同步工具类,用于协调多个线程的执行顺序。它允许一个或多个线程等待其他线程完成操作后再继续执行,类似于一个 “倒计时门闩”
    会对其进行计数,用一次减一进行计数,这就是为什么要用try,finally
  3. threadPool.execute(Runnable task)
    threadPool.execute(Runnable task) 是 Java 线程池(ExecutorService)的核心方法之一,用于提交一个任务(Runnable 对象)到线程池执行。它是线程池管理多线程的基础操作,下面详细解释其功能和用法。

HashMap模拟数据库

package KaKe;import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class SimpleDatabase {private Map<String,String> dataStore;//HashMap模拟数据库存储数据private ExecutorService threadPool;//线程池管理查询线程//无参构造器public SimpleDatabase(){//给HashMap存储数据库创建对象dataStore  = new HashMap<>();//线程池中创建三个线程threadPool = Executors.newFixedThreadPool(3);}//模拟数据库插入public void insert(String key,String value){dataStore.put(key,value);System.out.println("key:"+key+",value:"+value);}//多线程查询public void queryWithThreads(String... keys){if(keys==null || keys.length==0){System.out.println("查询条件为空");return;}CountDownLatch latch = new CountDownLatch(keys.length);//给keys数组中的每个key计数System.out.println("启动多线程查询");for (String key : keys) {//提交任务到线程池中执行threadPool.execute(()->{try{//模拟查询操作String value = dataStore.get(key);String result = value != null ?"线程["+Thread.currentThread().getName()+"]查询到:key="+key+",value="+value:"线程["+Thread.currentThread().getName()+"]查询不到:key="+key;System.out.println(result);}finally {latch.countDown();//执行完毕,计数减一}});}try{latch.await();//等待所有线程执行完毕System.out.println("所有查询线程执行完成");}catch (InterruptedException e) {e.printStackTrace();}}public void shutdown(){if (threadPool!=null && !threadPool.isShutdown()){threadPool.shutdown();System.out.println("数据库连接关闭");}}public static void main(String[] args) {SimpleDatabase db = new SimpleDatabase();//插入数据db.insert("user1","张三");db.insert("user2","李四");db.insert("user3","王五");db.queryWithThreads("user1","user2","user3");db.shutdown();}}
key:user1,value:张三
key:user2,value:李四
key:user3,value:王五
启动多线程查询
线程[pool-1-thread-3]查询到:key=user3,value=王五
线程[pool-1-thread-2]查询到:key=user2,value=李四
线程[pool-1-thread-1]查询到:key=user1,value=张三
所有查询线程执行完成
数据库连接关闭

List模拟数据库

package KaKe;import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ListBasedDatabase {private List<Map.Entry<String,String>> dataStore;private ExecutorService threadPool;public ListBasedDatabase(){//使用线程安全的ArrayList保证线程安全dataStore = new CopyOnWriteArrayList<>();threadPool = Executors.newFixedThreadPool(3);}public void insert(String key,String value){for (Map.Entry<String, String> entry : dataStore) {if (entry.getKey().equals(key)){System.out.println("插入失败:key="+key+"已存在");return;}}dataStore.add(Map.entry(key, value));System.out.println("插入成功:key="+key+"value="+value);}public void queryWithThreads(String... keys){if (keys==null || keys.length==0){System.out.println("查询条件为空");return;}CountDownLatch latch = new CountDownLatch(keys.length);System.out.println("启动线程查询:");for (String key : keys) {threadPool.execute(()->{try{String result = searchInList(key);System.out.println("线程["+Thread.currentThread().getName()+"]:"+result);}finally {latch.countDown();}});}try{latch.await();System.out.println("所有线程查询执行完成");}catch(InterruptedException e){e.printStackTrace();}}//在List中查找数据private String searchInList(String key){for (Map.Entry<String,String> entry: dataStore){if (entry.getKey().equals(key)){return "查询到数据:key="+key+",value="+entry.getValue();}}return "未找到key="+key+"的数据";}public void shutdown(){if (threadPool!=null && !threadPool.isShutdown() ){threadPool.shutdown();System.out.println("数据库关闭连接");}}public static void main(String[] args) {ListBasedDatabase db = new ListBasedDatabase();// 插入数据db.insert("user1", "张三");db.insert("user2", "李四");db.insert("user3", "王五");db.insert("user4", "赵六");db.insert("user5", "董七");db.queryWithThreads("user1","user2","user3","user4","user5");db.shutdown();}
}
插入成功:key=user1value=张三
插入成功:key=user2value=李四
插入成功:key=user3value=王五
插入成功:key=user4value=赵六
插入成功:key=user5value=董七
启动线程查询:
线程[pool-1-thread-1]:查询到数据:key=user1,value=张三
线程[pool-1-thread-3]:查询到数据:key=user3,value=王五
线程[pool-1-thread-1]:查询到数据:key=user4,value=赵六
线程[pool-1-thread-2]:查询到数据:key=user2,value=李四
线程[pool-1-thread-3]:查询到数据:key=user5,value=董七
所有线程查询执行完成
数据库关闭连接

总结:
其实本质上还是使用HashMap ,只不过后者是用List将其HashMap封装起来,然后插入和查询

http://www.cadmedia.cn/news/8409.html

相关文章:

  • wordpress 登录没反应seo简单速排名软件
  • 哪些网站做的比较好7个经典软文营销案例
  • 网站建设web前端开发入门义乌最好的电商培训学校
  • 大型网站建设培训课件seo入门课程
  • 常州市网站建设设计品牌策略有哪些
  • 深圳沙头角网站建设千锋教育培训多少钱
  • 深圳自建网站cnzz统计
  • wordpress百度搜索对接页面优化的方法
  • 宠物网站策划书最大的搜索网站排名
  • 沈阳关键词优化公司排名优化公司口碑哪家好
  • logo在线设计生成器免费下载谷歌seo博客
  • 网站开发是什么工作新东方考研班收费价格表
  • 黄页网大全免费软件seo顾问收费
  • 陕西建设厅网站人才库360推广登录入口
  • 建设 静态网站广州seo代理
  • 网站架构设计师岗位要求做网页的网站
  • wordpress内容模版文件在哪个目录安卓优化大师新版
  • 建设银行官方网站企业网银站长工具爱情岛
  • 网站建设亿玛酷专注百度推广代理查询
  • 贵州省建设厅二建报名网站seo综合查询工具有什么功能
  • 哪里网站可以做微信头像专门搜索知乎内容的搜索引擎
  • 广州微信网站建设公司哪家好武汉标兵seo
  • 沈阳免费做网站网站优化推广公司排名
  • 峨眉山网站建设沈阳seo优化新势力
  • 国外搜索网站排名知乎关键词排名优化
  • 页面模板资源网站优化的方法有哪些
  • 网站栏目怎么做国外b站不收费免费2023
  • 长春做网站公司百度网站收录提交入口全攻略
  • 成都模板网建站网络营销的四大要素
  • 写作网站可以签约未成年吗石家庄seo顾问