爪哇 2博客
 爪哇 2博客

爪哇 交换者示例

 爪哇  交换者示例
爪哇 1.5将Exchanger类与其他类一起引入 并发哈希图, CountDownLatch, 信号量.
交换者类用于在两个线程之间交换对象。 交换者只是等到两个单独的线程调用交换方法时才发生这种情况,它交换线程提供的数据。两个线程可以配对并在它们之间交换对象。交换器类可能在遗传算法或管道设计中很有用。

它具有两个重载版本的交换方法。

  • 交换(V x): 它等待另一个线程到达交换点并与该线程交换对象。
  • 交换(V x,长超时,TimeUnit单位): 它等待另一个线程 特定时间间隔 在方法中提供并与该线程交换对象。
让’借助示例了解:

我们有两个线程,即生产者和消费者,它们将交换Country对象。生产者将创建国家对象,而消费者将返回虚拟国家对象。

让’首先创建Country类。它只有一个名为countryName的属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
组织 . Arpit . 爪哇 2blog;
上市 国家 {
 
私人的 国家的名字;
 
上市 国家 ( 国家的名字) {
();
这个 .国家的名字 = 国家的名字;
}
 
上市 getCountryName() {
返回 国家的名字;
}
}
 

现在,我们将创建一个名为ExchangerExampleMain.java的主类,另外还有两个名为Producer和Consumer的类,它们将实现可运行的接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
组织 . Arpit . 爪哇 2blog;
 
进口 爪哇 . 实用程序 .同时.交换者;
 
上市 交换者ExampleMain {
 
     上市 静态的 虚空 主要 ([] args ) {
        交换者 交换器 = 交换者();
        //开始两个线程
         线 ( 制片人(交换器)). 开始 ();
         线 ( 消费者(交换器)). 开始 ();
    }
}
 
制片人 实施 可运行 {
 
    交换者 ;
    制片人(交换者 ){
         这个 . = ;
 
    }
    @覆写
     上市 虚空 () {
         对于 ( 整型 i = 0; i < 2; i ++ ){
           国家 国家 = 空值 ;
         如果 (i == 0)
               国家 = 国家 ( “印度” );
         其他
           国家 = 国家 (“不丹”);
 
             尝试 {
                //与虚拟的Country对象交换
                 国家 虚拟国家 = .交换( 国家 );
                 系统 .. 打印 (“来自消费者线程的国家对象:”+虚拟国家.getCountryName());
            } 抓住 (InterruptedException e) {
                 系统 .. 打印 (e);
            }
        }  
    }
}
 
消费者 实施 可运行 {
 
    交换者 ;
    消费者(交换者 ){
         这个 . = ;
    }
    @覆写
     上市 虚空 () {
         对于 ( 整型 i = 0; i < 2; i ++ ){
             尝试 {
                //从生产者线程获取Country对象
                //返回虚拟国家对象
                 国家 国家 = .交换( 国家 ( “假” ));
                 系统 .. 打印 (“来自生产者线程的国家对象:”+ 国家 .getCountryName());
 
            } 抓住 (InterruptedException e) {
                 系统 .. 打印 (e);
            }
        }      
    }
}
 

当您在程序上方运行时,将得到以下输出。

1
2
3
4
5
6
 
得到 国家 目的 消费者 线 :
得到 国家 目的 制片人 线 : 印度
得到 国家 目的 消费者 线 :
得到 国家 目的 制片人 线 : 不丹
 

如果您注意到,生产者已经与消费者交换了两个国家对象(印度和不丹),并得到了虚拟国家对象作为回报。
如果您想了解更现实的使用Exchanger。生产者和消费者可以交换缓冲区。当缓冲区已满时,生产者将为消费者提供完整的缓冲区,而消费者将返回空缓冲区作为回报。


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


让’s be Friends

©2020 爪哇 2博客