《Java线程与并发编程实践》—— 2.5 练习

简介: 下面的练习用来测试你对第2章内容的掌握程度。

本节书摘来异步社区《Java线程与并发编程实践》一书中的第2章,第2.5节,作者: 【美】Jeff Friesen,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 练习

下面的练习用来测试你对第2章内容的掌握程度。

1.指出与线程相关的三个问题。

2.判断对错:当程序计算的正确性取决于相对时间或者调度器所控制的多线程交叉时,你会遇到数据竞争问题。

3.给出同步的定义。

4.指出同步的两种属性。

5.同步是如何实现出来的?

6.判断对错:当一个已经获取锁的线程调用任意Thread的任意sleep()方法时不会释放锁。

7.如何指定一个同步方法?

8.如何指定一个同步块?

9.给出活跃性的定义。

10.指出三种活跃性挑战。

11.如何区分volatile和synchronized关键字?

12.判断对错:Java让你能够安全地访问一个final的属性而无需进行同步。

13.指出下面CheckingAccount类存在的线程问题:

public class CheckingAccount
{

   private int balance;
   public CheckingAccount(int initialBalance)
   {
      balance = initialBalance;
   }
   public boolean withdraw(int amount)
   {
      if (amount <= balance)
      {
         try
         {
            Thread.sleep((int) (Math.random() * 200));
         }
         catch (InterruptedException ie)
         {
         }
         balance -= amount;
         return true;
      }
      return false;
   }
   public static void main(String[] args)
   {
      final CheckingAccount ca = new CheckingAccount(100);
      Runnable r = new Runnable()
                   {
                      @Override
                      public void run()
                      {
                         String name = Thread.currentThread().
                         getName();
                         for (int i = 0; i < 10; i++)
                            System.out.println (name + "
                            withdraws $10: " +
                                             ca.withdraw(10));
                        }
                     };
         Thread thdHusband = new Thread(r);
         thdHusband.setName("Husband");
         Thread thdWife = new Thread(r);
         thdWife.setName("Wife");
         thdHusband.start();
         thdWife.start();
       }
   }```
相关文章
|
14小时前
|
安全 Java 开发者
深入理解Java中的并发编程模型
深入理解Java中的并发编程模型
|
1天前
|
安全 Java 容器
Java并发编程:避免常见的陷阱
Java并发编程:避免常见的陷阱
|
1天前
|
Java
【Java】程序练习1(数组)
【Java】程序练习1(数组)
|
1天前
|
安全 Java
Java多线程编程实践中的常见问题与解决方案
Java多线程编程实践中的常见问题与解决方案
|
1天前
|
安全 Java 数据库
Java并发编程:最佳实践与性能优化
Java并发编程:最佳实践与性能优化
|
1天前
|
设计模式 Java 容器
Java多线程编程中的设计模式与挑战
Java多线程编程中的设计模式与挑战
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
21 2
|
2天前
|
Java API 数据库
深研Java异步编程:CompletableFuture与反应式编程范式的融合实践
【6月更文挑战第30天】Java 8的CompletableFuture革新了异步编程,提供如thenApply等流畅接口,而Java 9后的反应式编程(如Reactor)强调数据流和变化传播,以事件驱动应对高并发。两者并非竞争关系,而是互补,通过Flow API和第三方库结合,如将CompletableFuture转换为Mono进行反应式处理,实现更高效、响应式的系统设计。开发者可根据需求灵活选用,提升现代Java应用的并发性能。
14 1
|
2天前
|
运维 监控 Java
探索Elasticsearch在Java环境下的全文检索应用实践
【6月更文挑战第30天】在大数据背景下,Elasticsearch作为分布式搜索分析引擎,因其扩展性和易用性备受青睐。本文指导在Java环境中集成Elasticsearch,涉及安装配置、使用RestHighLevelClient连接、索引与文档操作,如创建索引、插入文档及全文检索查询。此外,还讨论了高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据全文检索。
13 0
|
2天前
|
数据采集 算法 数据处理
Python并发编程:异步IO与多线程的比较与应用
本文探讨了Python中异步IO和多线程两种并发编程模型的优劣及其在实际应用中的适用性。通过比较它们在性能、资源消耗和代码复杂度等方面的差异,分析了不同场景下选择合适的并发模型的策略和方法。