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

中国制造网外贸网站静态网站做毕业设计

中国制造网外贸网站,静态网站做毕业设计,泉州网站搭建,网站怎样自动文字排版文章目录 什么是JUC#xff1f;Callable接口ReentrantLockReentrantLock VS synchronized 原子类线程池信号量SemaphoreCountDownLatch 什么是JUC#xff1f; JUC是#xff1a;java.util.concurrent这个包名的缩写。它里面包含了与并发相关#xff0c;即与多线程相关的很多… 文章目录 什么是JUCCallable接口ReentrantLockReentrantLock VS synchronized 原子类线程池信号量SemaphoreCountDownLatch 什么是JUC JUC是java.util.concurrent这个包名的缩写。它里面包含了与并发相关即与多线程相关的很多东西。我们下面就来介绍这些东西。 Callable接口 Callable接口类似与Runnable接口 Runnable接口描述的任务是不带返回值的。 callable接口描述的任务是带返回值的存在的意义就是让我们获取到结果 让我们通过下面的代码来仔细体会一下不同 // 使用Runnable来计算 12.....1000static class Result{public int sum;public Object locker new Object();}public static void main(String[] args) {Result result new Result();//创建一个专门的线程来求和Thread thread new Thread(){Overridepublic void run() {for (int i 0; i 1000; i){result.sum ;}synchronized (result.locker){result.locker.notify();}}};thread.start();// 必须得等thread线程执行完了再打印synchronized (result.locker) {if (result.sum 0){try {result.locker.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(result.sum);}}// 使用callable来计算12....1000public static void main(String[] args) {//使用callable来定义一个任务CallableInteger callable new CallableInteger() {Overridepublic Integer call() throws Exception {int sum 0;for (int i 0; i 1000; i){sum;}return sum;}};// 用来接受callable任务作为参数FutureTaskInteger futureTask new FutureTask(callable);//Thread 里的参数没有callable类型 只有futuretask类型 所以需要创建一个futuretask类型来过渡Thread thread new Thread(futureTask);thread.start();try {System.out.println(futureTask.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}ReentrantLock ReentrantLock也是可重入锁。它的出现是为了补充synchronized可重入锁无法实现的一些操作。 它一共有三个核心的方法 tryLock试试能不能加上锁试成功了就加上锁试失败了就放弃。还可以指定加锁的等待超时时间超过时间则放弃加锁。lock加锁unlock解锁 ReentrantLock VS synchronized ReentrantLock必须手动调用lock和unlock方法这样如果它们之间出现异常unlock方法就有可能调用不到造成资源浪费。而synchronized则没有这个问题。 public static void main(String[] args) {// 和synchronized相比有三个优势 两个不同ReentrantLock reentrantLock new ReentrantLock();try {reentrantLock.lock();}finally {//当在 lock和unlock 之间出现异常时 unlock就无法执行到 需要用到finally来必须执行//synchronized不存在这个问题 因为它只要出了代码块就一定会解锁reentrantLock.unlock();}}ReentrantLock是标准库的一个类底层是基于Java实现的synchronized是Java关键字底层是通过JVM实现的C实现的tryLock可以尝试加锁并且指定加锁的等待超时时间synchronized会一直死等。在实际开发中往往不使用死等。ReentrantLock可以实现公平锁通过指定构造方法里的一个参数synchronized是非公平锁。 ReentrantLock reentrantLock new ReentrantLock(true);ReentrantLock是搭配Condition类实现通知唤醒操作的唤醒操作可以指定唤醒哪一个线程synchronized是搭配wait-notify实现通知唤醒操作的唤醒操作是随机唤醒一个线程。 原子类 原子类的底层是基于CAS实现的使用原子类最常见的场景就是多线程计数。 CAS操作前面已经非常详细的介绍过点击此处可以查看浏览 //原子类 多用于计数//count.getAndIncrement count//count.incrementAndGer count//count.getAndDecrement count--//count.decrementAndGer --countpublic static void main(String[] args) {AtomicInteger count new AtomicInteger();Thread thread new Thread(() - {for (int i 0; i 50000; i){//相当与count;count.getAndIncrement();}});Thread thread1 new Thread(() - {for (int i 0; i 50000; i){//相当于count;count.getAndIncrement();}});thread.start();thread1.start();try {thread.join();thread1.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(count.get());}线程池 前面已经非常详细的介绍过点击此处可以查看浏览 信号量Semaphore 信号量的基本操作有两个 P操作申请一个资源 V操作释放一个资源 信号量本身是一个计数器表示可用资源的个数 P操作申请一个资源可用资源的个数就-1 V操作释放一个资源可用资源的个数就1 当计数为0时继续进行P操作就会阻塞直到其他线程执行V操作释放资源 // 信号量可以看成更广义的锁 锁就是一个信号量 可用资源数只有1public static void main(String[] args) throws InterruptedException {// 需要指定初始值 表示可用资源的个数Semaphore semaphore new Semaphore(4);semaphore.acquire();System.out.println(申请资源);semaphore.acquire();System.out.println(申请资源);semaphore.acquire();System.out.println(申请资源);semaphore.release();System.out.println(释放资源);semaphore.release();System.out.println(释放资源);}CountDownLatch CountDownLatch使用的效果类似于一个跑步比赛当最后一个选手到达终点就结束。 使用CountDownLatch的时候首先要设置一下有几个选手参赛每个选手撞线了就调用一下countDown方法当撞线次数达到选手的个数时比赛就结束。 放到程序中理解 比如要下载一个很大的文件把文件分成多部分分别下载。使用多线程执行下载任务每个线程下载一部分当所有的线程都下载完毕整个线程就下载完毕了。 //CountDownLatchpublic static void main(String[] args) {// 设置任务的个数CountDownLatch downLatch new CountDownLatch(10);for (int i 0; i 10; i){Thread thread new Thread(() - {System.out.println(开始任务 Thread.currentThread().getName());try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(任务结束 Thread.currentThread().getName());downLatch.countDown();});thread.start();}try {downLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(全部任务都结束);}
http://www.dnsts.com.cn/news/208698.html

相关文章:

  • 哪个网站推广产品好免费网站排名优化在线
  • 免费做请帖的网站新建网站注意事项
  • 南京 招网站开发企业网站建设哪家公司好
  • 5条国内最新新闻seo教育
  • iis7部署asp网站深圳建设工程价格信息网站
  • 网页设计公司的痛点是什么15 企业网站优化方案有哪些内容
  • 国内哪个网站做水产比较大代理彩票网站做链接
  • 陈仓网站建设鸿蒙app开发工具
  • 网站seo描述wordpress 文章赞
  • 网站开发工资咋样seo文章是什么意思
  • 大连网站推广排名佛山室内设计公司排名
  • 推广的含义模板网站可以做seo吗
  • 做一个京东网站怎么做lv官网手表
  • 设计师搜图网站代客做网站
  • 都网站建设保洁公司网站怎么做
  • 网站怎么做推广和优化使用帝国备份王搬迁织梦网站
  • asp.net网站开发流程泉州3d建模培训
  • 介绍移动互联网的网站有哪些网上书店网站建设毕业设计范文
  • 个人网站建立潍坊网络推广个人合作
  • 成都网站建设制作服务成都分销网站建设
  • 济南建设网站的公司哪家好网站推广需要数据整改吗
  • 阳网站建设门面设计装修效果图
  • xx单位网站建设方案谁帮58同城做的网站吗
  • 做网站必须有框架是吗行业垂直网站开发
  • 网站后台初始密码wordpress订阅支付
  • 织梦大气金融类通用企业网站模板mvc电子商务网站开发
  • 开发网站服务唱片公司网站模板
  • flash网站导航怎么做四川建设厅官方网站
  • 如何访问服务器上的网站国内精美网站界面网址
  • 枣阳网站建设等服务延庆网站建设