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

维护网址免费seo推广软件

维护网址,免费seo推广软件,怎么用java做企业门户网站,做教育集团的网站建设一、Exchanger介绍 ①、Exchanger,并发工具类,用于线程间的数据交换。 ②、两个线程,两个缓冲区,一个线程往一个缓冲区里面填数据,另一个线程从另一个缓冲区里面取数据。当填数据的线程将缓冲区填满时,或者…

一、Exchanger介绍
①、Exchanger,并发工具类,用于线程间的数据交换。
②、两个线程,两个缓冲区,一个线程往一个缓冲区里面填数据,另一个线程从另一个缓冲区里面取数据。当填数据的线程将缓冲区填满时,或者取数据的线程将缓冲区里的数据取空时,就主动向对方发起交换缓冲区的动作,而交换的时机是,一个缓冲区满,另一个缓冲区空。

注意:使用Exchanger来对线程进行数据操作时,线程必须是成对的(线程数量为双数)。

二、介绍Exchanger两个重要方法
①、exchange(V x):等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。

package chapter3.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;/*** @author czd*/
public class ExchangerTest1 {public static void main(String[] args) {final Exchanger<String> exchanger = new Exchanger<>();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {String result = exchanger.exchange(" 我是来自Thread-A发送的数据!");System.out.println(Thread.currentThread().getName() + " Result: " + result);}catch (InterruptedException e){e.printStackTrace();}}},"Thread-A").start();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {TimeUnit.SECONDS.sleep(5);String result = exchanger.exchange(" 我是来自Thread-B发送的数据!");System.out.println(Thread.currentThread().getName() + " Result: " + result);}catch (Exception e){e.printStackTrace();}}},"Thread-B").start();}
}

输出结果
在这里插入图片描述

②、exchange(V x, long timeout, TimeUnit unit):等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。

package chapter3.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;/*** @author czd*/
public class ExchangerTest1 {public static void main(String[] args) {final Exchanger<String> exchanger = new Exchanger<>();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {String result = exchanger.exchange(" 我是来自Thread-A发送的数据!",3,TimeUnit.SECONDS);System.out.println(Thread.currentThread().getName() + " Result: " + result);}catch (InterruptedException e){e.printStackTrace();} catch (TimeoutException e){System.out.println("超时了!");}}},"Thread-A").start();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {TimeUnit.SECONDS.sleep(5);String result = exchanger.exchange(" 我是来自Thread-B发送的数据!");System.out.println(Thread.currentThread().getName() + " Result: " + result);}catch (Exception e){e.printStackTrace();}}},"Thread-B").start();}
}

输出结果
在这里插入图片描述

三、提出疑问–A:当使用Exchanger对两个线程进行数据交换时,线程A发送的东西,与线程B接收到的东西是否是一样的?(一样是指地址是否正确,而不仅仅是值一样)

下面是一个验证地址是否一样的代码案例

package chapter3.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;/*** @author czd*/
public class ExchangerTest2 {public static void main(String[] args) {final Exchanger<Object> exchanger = new Exchanger<>();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {Object object = new Object();Object obj = exchanger.exchange(object);System.out.println(Thread.currentThread().getName() + " Thread-A send Object: " + object);System.out.println(Thread.currentThread().getName() + " Thread-A get Object: " + obj);}catch (InterruptedException e){e.printStackTrace();}}},"Thread-A").start();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");try {TimeUnit.SECONDS.sleep(5);Object object = new Object();Object obj = exchanger.exchange(object);System.out.println(Thread.currentThread().getName() + " Thread-B send Object: " + object);System.out.println(Thread.currentThread().getName() + " Thread-B get Object: " + obj);}catch (Exception e){e.printStackTrace();}}},"Thread-B").start();}
}

输出结果
在这里插入图片描述
由图可以看出,线程A发送的东西与线程B接收到的东西是一样的,即连地址都是一样的

四、提出疑问–B:当使用Exchanger对两个线程进行数据交换时,是不是只能交换一次?能否多次的对两个线程进行数据的交换?

下面是一个验证是否能多次进行数据交换的代码案例

package chapter3.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;/*** @author czd*/
public class ExchangerTest3 {public static void main(final String[] args) {final Exchanger<Integer> exchanger = new Exchanger<>();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");while (true){try {AtomicInteger atomicInteger = new AtomicInteger(1);atomicInteger.set(exchanger.exchange(atomicInteger.get()));System.out.println("Thread-A Value:" + atomicInteger.get());}catch (Exception e){e.printStackTrace();}}}},"Thread-A").start();new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + "开始启动....");while (true){try {AtomicInteger atomicInteger = new AtomicInteger(2);atomicInteger.set(exchanger.exchange(atomicInteger.get()));System.out.println("Thread-B Value:" + atomicInteger.get());TimeUnit.SECONDS.sleep(2);}catch (Exception e){e.printStackTrace();}}}},"Thread-B").start();}
}

输出结果
在这里插入图片描述
由图可以看出,使用Exchanger可以对两个线程进行多次的数据交换

http://www.wooajung.com/news/35231.html

相关文章:

  • 个人网站需要买服务器吗市场调研公司
  • 国外的包装设计网站杭州网络
  • 太原网站建设外包校园推广方案
  • 池州网站建设费用站长工具外链查询
  • 医疗器械网站备案前置审批事例seo 网站优化推广排名教程
  • 做网站的功能是什么营销策划方案模板
  • 网站怎样在360做优化百度推广登录页面
  • 制作一个网站需要什么互联网品牌营销公司
  • 商城型网站建设多少钱百度推广有用吗
  • 做公司网站的价格百度一下你就知道移动首页
  • 网站建设主题有哪些注意事项简易的旅游网页制作
  • 同一服务器做两个顶级域名网站网站推广排名服务
  • 东营网站建设app开发关键词优化推广排名多少钱
  • 慈溪网站建设哪家好深圳竞价托管公司
  • 做网站就seo外包公司兴田德润
  • 网站设计步骤详解推销
  • 深圳网站建设 贝尔利友情链接论坛
  • 开发网站流程seo专业培训机构
  • 郑州做网站的大公司韶关新闻最新今日头条
  • 室内设计做效果图可以接单的网站中文搜索引擎排名
  • 绍兴网站建设技术外包什么叫营销
  • 衡水移动端网站建设win7优化工具
  • 中华建设网算什么级别网站百度关键词优化系统
  • 最专业的房地产网站建设新乡网络推广外包
  • 《网站基础建设-首保》女教师网课入06654侵录屏
  • 平度好的建设网站web成品网站源码免费
  • 做问卷比较好的网站排名优化公司
  • 新乡网站建设公司广告平台网站有哪些
  • 怎么保证网站安全性竞价托管多少钱
  • 商丘企业做网站关键词上首页的有效方法