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

网站出现搜索怎么开网店淘宝

网站出现搜索,怎么开网店淘宝,群晖外网wordpress,切实加强网站建设juc:指的是java.util.concurrent包#xff0c;该包中加载了一些有关的多线程有关的类。 目录 一、Callable接口 FutureTask类 参考代码#xff1a; 二、ReentrantLock 可重入锁 ReentrantLock和synchronized的区别#xff1a; 1.ReentantLock还有一个方法#xff1a…juc:指的是java.util.concurrent包该包中加载了一些有关的多线程有关的类。 目录 一、Callable接口 FutureTask类 参考代码 二、ReentrantLock 可重入锁 ReentrantLock和synchronized的区别 1.ReentantLock还有一个方法tryLock:尝试上锁。 2.ReentantLock可以实现公平锁 3ReentrantLock和synchronized的等待通知机制不同 三、semaphore 信号量 四、CountDownLatch 同时等待多个任务执行结束 五、实现线程安全的方式总结 六、创建线程的方式总结 七.线程安全的集合类 1.多线程环境使用集合:ArrayList 1.用synchronized加锁,保证线程安全. 2.使用Collectios.synchronizedList(new ArrayList) 3.使用CopyOnWriteArrayList  写时拷贝 2.多线程环境使⽤队列 1.自己加锁保证线程安全。 2.使用阻塞队列BlockingQueue(线程安全的. 3.多线程环境使用哈希表 1.HashTable 2.ConcurrentHashMap:并发哈希表 一、Callable接口 Callable是一个接口将线程封装在方法中带有一个返回值用于实现计算并获取结果类型的任务。相当于把线程封装了⼀个返回值.⽅便借助多线程的⽅式计算结果.它的作用与Runnable类似. 计算123...1000: 按照之前的方法要先定义一个成员变量在一个线程中进行累加并返回累加的结果还要用join等该线程执行结束之后才能得到结果 这种方式感觉不太美观Callable是一个接口就是处理这种带有返回值的多线程任务的 Callable是一个泛型接口指定的类型就是要返回结果的类型。 通过 匿名内部类 实现该接口的call方法,来完成要实现的任务 FutureTask类 在Thread类中并没有提供构造函数来传入Callable。但JVM提供了另一个类FutureTask类:未来任务作为Thread类和Callable接口的 “粘合剂” FutureTask提供了可以传Callable的构造方法且Thread提供了可以传FutureTask类的构造方法这就可以将两者结合起来FutureTask类也是泛型类指定的类型就是传入的Callable的返回类型 对FutureTask类的理解 Callable完成任务是需要时间的该任务是在未来完成的最后取结果的时候 需要一个凭据FutureTask 就是这个凭据。 通过调用FutureTask的get方法可以得到Callable的返回值get方法是带有阻塞的当传入的Callable没有完成任务返回数据时get方法就处于阻塞等待状态。 参考代码 /*** Callable接口 带有返回值* 通过匿名内部类 重写它的 call方法完成任务 * 通过 FutureTask类 将Thread与Callable连接*/public static void main(String[] args) throws ExecutionException, InterruptedException {CallableInteger callable new CallableInteger(){Overridepublic Integer call() throws Exception {int sum0;for(int i 1; i 1000; i ){sum i;}return sum;}}; // Thread thread new Thread(callable);FutureTaskInteger futureTask new FutureTask(callable);Thread thread new Thread(futureTask);thread.start();System.out.println(sum futureTask.get());}//普通方法private static int sum0;//定义一个 静态成员变量public static void main2(String[] args) throws InterruptedException {Thread tnew Thread(()-{for(int i 1;i 1000;i){sum i;}});t.start();t.join();//要等t线程执行结束System.out.println(sum sum);} Callable和Runnable相比Callable在实现计算并有返回值的任务时代码看上去更美观别的和Runnable功能是一样的。 二、ReentrantLock 可重入锁 可重入锁和synchronized锁类似。 这个锁提供了两个方法lock(上锁 unlocker解锁 使用这个锁的时候要注意解锁代码的放置位置;上锁后在代码执行过程中遇到return 或者异常终止了就可能引起 unlock没有被执行锁没有释放。因此正确使用ReentrantLock锁 是把unlock放在 finall代码块中这样就能防止 锁未被释放了。 ReentrantLock和synchronized的区别 1.ReentantLock还有一个方法tryLock:尝试上锁。 lock:直接加锁加锁不成功就进行阻塞tryLock:尝试上锁上锁不成功返回false,不会进入阻塞状态。提供了更多的可操作空间。 创建两个线程t1,t2;对两个线程都用tryLock上锁t1线程先获取到了锁并返回true;t2未获取到锁返回了false,但并未阻塞而是继续执行代码打印了Thread 02,因为未加锁成功也就无法解锁t2的unlock就抛出了异常之后t1的休眠时间到打印“Thread 01解锁。 2.ReentantLock可以实现公平锁 ReentantLock提供的实现公平锁的方法通过一个队列按照先来后到的方式将线程放到队列中按照队列中的方式执行。 3ReentrantLock和synchronized的等待通知机制不同 synchronized通过 wait/notify 来实现 ReentrantLock通过Condition方法来实现 三、semaphore 信号量 信号量,⽤来表⽰可⽤资源的个数.本质上就是⼀个计数器. 就类似停车场用N记录当前可停车位 有车进来停车N-1;有车开走N1。这个N就表示可用资源的个数。 设“可⽤资源的个数用 N来表示 申请一个资源会使N-1称为“P操作”释放一个资源会使N1称为“V操作”。如果N为0了继续P操作则会进行阻塞。 信号量是操作系统内部提供的一种机制操作系统对应的api被JVM封装下就能通过java代码来调用其相关的操作了。 在java中用 acquire方法表示申请release方法表示释放。 锁就是一种特殊的信号量可以认为是计数值为1的信号量释放锁状态就是1加锁状态就是0。对于这种非0即1的信号量称为二元信号量。 Semaphore( n ):传参数的构造方法参数表示可用资源的个数. 当n1时也就相当于一个锁了通过acquire申请资源打印“信号量1”再申请资源就会进入阻塞状态。 四、CountDownLatch 同时等待多个任务执行结束 CountDownLatch是多线程在特定场景中使用的一个小工具功能与join类似join是等待一个进程结束CountDownLatch 可同时等待 N个任务执行结束。 代码案例:同时等待10个线程结束, 创建10个线程同时执行下载任务main线程 等待结束. /*** CountDownLatch:可同时等待多个线程结束* 设同时等待10个线程结束* 创建10个线程同时下载等待结束*/ public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch new CountDownLatch(10);//10表示同时等待10个线程结束for(int i0;i10;i){ //创建10个线程 负责下载int ni;new Thread(()-{System.out.println(开始下载 n);Random random new Random();long s(random.nextInt(5)1)*1000;try {Thread.sleep(s);//每个线程设置随机休眠时间} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(结束下载 n);countDownLatch.countDown();//执行完一个线程就记录一下}).start();}countDownLatch.await();System.out.println(main );} 执行结果 五、实现线程安全的方式总结 1.synchronized锁 2.ReentrantLock可重入锁 3.CAS原子类 4.Semaphore信号量 六、创建线程的方式总结 1.通过继承Thread类及其匿名内部类方式 2.通过实现Runnable接口及匿名内部类方式 3.基于lambda方式 4.基于线程池 5.通过实现Callable接口方式创建 七.线程安全的集合类 Vector,Stack,HashTable,是线程安全的(不建议⽤),其他的集合类不是线程安全的. 1.多线程环境使用集合:ArrayList 保证在多线程安全下的使用方式: 1.用synchronized加锁,保证线程安全. 2.使用Collectios.synchronizedList(new ArrayList) 通过Collections类,关键位置都加上synchronized锁,保证线程安全. synchronizedList是标准库提供的⼀个基于synchronized进⾏线程同步的List.synchronizedList 的关键操作上都带有synchronized 相当于给ArrayList加了个壳,加壳后新的集合 list 就是线程安全的了. 3.使用CopyOnWriteArrayList  写时拷贝 CopyOnWrite容器即写时复制的容器。 当多个线程只进行读操作的时候,不会产生线程安全问题当要对数组修改时,会先将顺序表复制一benneg份,修改新的表中的内容,再将引用指向新的数组.(这里的操作是原子的,不用加锁) 使用CopyOnWriteArrayList 的利弊 优点在多读少写的情况下无需加锁就解决了ArrayList的线程安全问题提高了性能。 缺点对数组的修改不能太频繁数组不能太长这些可能会导致复制操作成本太高。 2.多线程环境使⽤队列 1.自己加锁保证线程安全。 2.使用阻塞队列BlockingQueue(线程安全的. 3.多线程环境使用哈希表 HashMap是线程不安全的HashTable是线程安全的duoxianceh 多线程环境使用哈希表可以使用 1.HashTable 2.ConcurrentHashMap:并发哈希表 HashTable是把关键方法上都加了synchronized锁也就是一个线程对数组中某条链表操作时别的线程都不能对该数组操作HashTable在多线程下的执行效率是很慢的。 ConcurrentHashMap: 对HashTable进行了改进和优化 1.优化了加锁方式 对读操作没有加锁只是使用Volatile修饰确保从内存读数据读到的是刚修改过的数据只对写操作进行加锁且缩小了锁的粒度不再将整个数组都加锁对每个链表都分配了一把锁将每个链表的头节点对象设为锁只有当多个线程访问同一个链表时才会产生锁冲突。这样就降低了锁冲突提高了效率。 2.充分利用CAS原子操作特性 ⽐如size属性通过CAS来更新.避免出现重量级锁的情况. 3.优化了扩容方式 HashTable通过计算负载因子判断是否需要扩容达到要扩容的值就直接扩容创建新数组将原来的数据全复制到新数组中。当数据量非常的时扩容操作会进行的比较慢表现出来的就是在运行的某一时刻比较慢不具有稳定性。 ConcurrentHashMap对此进行了优化通过“化整为零”方式进行扩容不是一下将全部数据进行拷贝而是进行分批拷贝 当需要扩容时先创建一个新的数组每次将一部分数据拷贝到新数组中后续每个来操作ConcurrentHashMap的线程,都会参与搬家的过程.每个操作负责搬运⼀⼩部 分元素.这个过程中新老哈希表都存在扩容结束删除旧表 扩容期间进行插入操作直接向新数组中进行插入 删除操作对新老数组都进行删除操作 查找操作对新老数组都进行查找操作
http://www.hkea.cn/news/14429521/

相关文章:

  • 中国公路建设行业协会网站上特价锦州网站建设
  • 保定自助建站软件网站建设与开发的收获与体会
  • 长沙服装网站建设微信小程序分销商城
  • 网站引导页怎么做.黄金网站app免费视频大全
  • 高校网站建设汇报做网站一个月工资
  • 手机怎么做淘客网站网站商城网络整合营销
  • 淘宝网站建设策划案从用户旅程角度做网站分析
  • 图片类网站欣赏怎么注册企业邮箱免费注册
  • 网站建设需要哪些必备文件手机网站app制作公司
  • 科研网站怎么建设官方网站搭建要多少钱
  • 黄南州wap网站建设公司网站推广的途径和要点
  • 1元做网站方案江阴企业网站制作
  • 重庆如何做聚政网站网页无法访问此页面怎么办?网页打不开怎么解决
  • 网站发布文章怎么才能让百度收录关键词搜索广告
  • 专门做养老院的网站wordpress 源文件导入
  • 培训网站设计小程序开发制作工具
  • 优秀的电商设计网站有哪些昆明平台网站开发
  • photoshop制作网站海报阿里巴巴推广平台
  • 企业网站自己怎么做石家庄网络公司行业
  • 动态ip上做网站电商货源平台
  • 做网站容易还是编程容易关键词优化方法有什么步骤
  • 网站开发发和后台开发有什么区别品牌建设实施细则
  • 建网站_网站内容怎么做电子政务门户网站建设教训
  • 推广优化公司网站互联网营销师培训班
  • 医院网站实例短视频优化
  • 顺德网站建设服务平台成都活动策划公司
  • 网页设计购物网站建设c2c商城网站建设方案
  • 个人博客网站建设业务盐城公司做网站
  • 音乐网站建设方案注册网站安全吗
  • 制作微网站的平台wordpress文章排序错误