java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Π”. Π›ΠΎΠ½Π³, К. Бастани | Java Π² ΠΎΠ±Π»Π°ΠΊΠ΅. Spring Boot, Spring Cloud, Cloud Foundry (2019) [PDF]

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Sierra K., Bates B., Robson E. | OCP: Java SE 8 Programmer II Exam Guide: Exam 1Z0-809 (2018) [PDF/ePub]

Study for the OCP Java SE 8 Programmer II exam using this effective exam preparation guide from Oracle Press. Written by a team of experts, including two developers of the original exam, OCP Java SE 8 Programmer II Exam Guide (Exam 1Z0-809) offers comprehensive coverage of every subject on the test and lays out essential Java programming skills. Throughout, step-by-step exercises; self-tests; and β€œExam Watch,” β€œInside the Exam,” and β€œOn the Job” sections highlight salient points and aid in learning. In all, the book and accompanying digital content feature more than 350 practice questions that mirror those on the live test in tone, format, and content.

Clearly explains every topic on Exam 1Z0-809, including:

β€’Declarations, access control, and enums
β€’Object orientation
β€’Assertions and exceptions
β€’Dates, times, locales, and resource bundles
β€’I/O and NIO
β€’Generics and collections
β€’Inner classes
β€’Lambda expressions and functional interfaces
β€’Streams
β€’Threads
β€’Concurrency
β€’JDBC

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Alan Mycroft, Mario Fusco, Raoul-Gabriel Urma | Modern Java in Action, 2nd Edition (2018) [En] [PDF]

Manning’s bestselling Java 8 book has been revised for Java 9 and Java 10! In Modern Java in Action, readers build on their existing Java language skills with the newest features and techniques.
The release of Java 9 builds on what made Java 8 so exciting. In addition to Java 8’s lambdas and streams, Java 9 adds a host of new features of its own. It includes new library features to support reactive programming, which give users new ways of thinking about programming and writing code that is easier to read and maintain.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Дэвид Гриффитс, Π”ΠΎΠ½ Гриффитс. | Head First. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Android. 2-Π΅ ΠΈΠ·Π΄. (2018) [PDF]

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Π―Π½ Π€. Π”Π°Ρ€Π²ΠΈΠ½ | Android. Π‘Π±ΠΎΡ€Π½ΠΈΠΊ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². Π—Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. (2018) [PDF]

Π­Ρ‚Π° ΠΊΠ½ΠΈΠ³Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΌΠΎΡ‡ΡŒ сообщСству Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Android ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ знаниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… прилоТСния Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅. ВсС знания, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² этой ΠΊΠ½ΠΈΠ³Π΅, ΠΎΠ±Π»Π΅Π³Ρ‡Π°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Android.Книга ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ созданиС работоспособных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Android с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ 230 ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ содСрТит Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ интСрфСйсами, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ΅Π½ΡΠΎΡ€Π½Ρ‹ΠΌΠΈ ТСстами, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ опрСдСлСния мСстополоТСния, Π²Π΅Π±-слуТбами ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ возмоТностями устройства, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅Ρ€Π° ΠΈ аксСлСромСтр. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° Google Play Market.
Книга идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΌΠΈ языком Java, основами ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Android ΠΈ интСрфСйса Java SE API. Она содСрТит Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹, прСдоставлСнныС Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ содСрТит Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ использованию.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Craig Walls | Spring in Action, 5th Edition (2018) [En] [PDF]

Spring in Action, 5th Edition is the fully updated revision of Manning’s bestselling Spring in Action. This new edition includes all Spring 5.0 updates, along with new examples on reactive programming, Spring WebFlux, and microservices. You’ll also find the latest Spring best practices, including Spring Boot for application setup and configuration.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Christian Bauer, Gavin King, and Gary Gregory | Java Persistence with Hibernate, Second Edition (2015) [En] [PDF]

Java Persistence with Hibernate, Second Edition explores Hibernate by developing an application that ties together hundreds of individual examples. In this revised edition, authors Christian Bauer, Gavin King, and Gary Gregory cover Hibernate 5 in detail with the Java Persistence 2.1 standard (JSR 338). All examples have been updated for the latest Hibernate and Java EE specification versions.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Herbert Schildt | Java: A Beginner’s Guide, Eighth Edition [En] [PDF]

Thoroughly updated for Java Platform Standard Edition 11, this hands-on resource shows, step by step, how to get started programming in Java from the very first chapter. Written by Java guru Herbert Schildt, the book starts with the basics, such as how to create, compile, and run a Java program. From there, you will learn essential Java keywords, syntax, and commands

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Marten Deinum | Spring Boot 2 Recipes / (2018) [PDF, ePub] [En]

Solve all your Spring Boot 2 problems using complete and real-world code examples. When you start a new project, you’ll be able to copy the code and configuration files from this book, and then modify them for your needs. This can save you a great deal of work over creating a project from scratch.
Using a problem-solution approach, Spring Boot 2 Recipes quickly introduces you to Pivotal’s Spring Boot 2 micro-framework, then dives into code snippets on how to apply and integrate Spring Boot 2 with the Spring MVC web framework, Spring Web Sockets, and microservices. You’ll also get solutions to common problems with persistence, integrating Spring Boot with batch processing, algorithmic programming via Spring Batch, and much more. Other recipes cover topics such as using and integrating Boot with Spring’s enterprise services, Spring Integration, testing, monitoring and more.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

ΠšΡ€ΠΈΡ Π¨Π΅Ρ„Π΅Ρ€, ΠšΠ»Π°Ρ€Π΅Π½Ρ Π₯ΠΎ, Π ΠΎΠ± Π₯Π°Ρ€Ρ€ΠΎΠΏ | Spring 4 для профСссионалов / (2015) [PDF]

Книга прСдставляСт собой ΠΌΠ½ΠΎΠ³ΠΎΠ»Π΅Ρ‚Π½ΠΈΠΉ бСстсСллСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ с Ρ†Π΅Π»ΡŒΡŽ отраТСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Ρ… послСднСй вСрсиСй ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Spring Framework 4. Π‘ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ 4-Π³ΠΎ издания эта популярная ΠΊΠ½ΠΈΠ³Π° Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡Π½ΠΎ считаСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½Ρ‹ΠΌ руководством ΠΏΠΎ Spring. Π’Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ основы ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹, связанныС с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ Spring. Авторы подСлятся с Π²Π°ΠΌΠΈ собствСнным Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π² области ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, использования Hibernate ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с EJB. Помимо основ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Spring Framework для построСния Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈΠ»ΠΈ частСй ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Java-прилоТСния: Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Π²Π΅Π±-уровня ΠΈ уровня ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΉ, развСртывания ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. ΠœΠ½ΠΎΠ³ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π² освоСнии Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², рассмотрСнных Π² этой ΠΊΠ½ΠΈΠ³Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΡ… совмСстной Ρ€Π°Π±ΠΎΡ‚Ρ‹. Устойчивая ΠΈ лСгковСсная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Spring Framework с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ инфраструктурой для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Она тСсно взаимодСйствуСт с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Java-тСхнологиями ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Hibernate, Groovy, MyBatis ΠΈ Ρ‚.Π΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Spring Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ с Java EE ΠΈ JPA 2.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Chris Schaefer, Clarence Ho, Iuliana Cosmina, Rob Harrop | Pro Spring 5, 5th Edition / (2017) [PDF]

Master Spring basics and core topics, and share the authors’ insights and real–world experiences with remoting, Hibernate, and EJB. Beyond the basics, you’ll learn how to leverage the Spring Framework to build the various tiers and parts of an enterprise Java application: transactions, web and presentation tiers, deployment, and much more. A full sample application allows you to apply many of the technologies and techniques covered in Pro Spring 5 and see how they work together.
This book updates the perennial bestseller with the latest that the new Spring Framework 5 has to offer. Now in its fifth edition, this popular title is by far the most comprehensive and definitive treatment of Spring available. It covers the new functional web framework and interoperability with Java 9.
What You’ll Learn

Discover what’s new in Spring Framework 5
Use the Spring Framework with Java 9
Master data access and transactions
Work with the new functional web framework
Create microservices and other web services
Who This Book Is For
Experienced Java and enterprise Java developers and programmers. Some experience with Spring highly recommended.

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Sciore E. | Java Program Design / (2019) [PDF/ePub]

Get a grounding in polymorphism and other fundamental aspects of object-oriented program design and implementation, and learn a subset of design patterns that any practicing Java professional simply must know in today’s job climate.

Java Program Design presents program design principles to help practicing programmers up their game and remain relevant in the face of changing trends and an evolving language. The book enhances the traditional design patterns with Java’s new functional programming features, such as functional interfaces and lambda expressions. The result is a fresh treatment of design patterns that expands their power and applicability, and reflects current best practice.

The book examines some well-designed classes from the Java class library, using them to illustrate the various object-oriented principles and patterns under discussion. Not only does this approach provide good, practical examples, but you will learn useful library classes you might not otherwise know about.

The design of a simplified banking program is introduced in chapter 1 in a non-object-oriented incarnation and the example is carried through all chapters. You can see the object orientation develop as various design principles are progressively applied throughout the book to produce a refined, fully object-oriented version of the program in the final chapter.

What You’ll Learn:
— Create well-designed programs, and identify and improve poorly-designed ones
— Build a professional-level understanding of polymorphism and its use in Java interfaces and class hierarchies
— Apply classic design patterns to Java programming problems while respecting the modern features of the Java language
— Take advantage of classes from the Java library to facilitate the implementation of design patterns in your programs

Who This Book Is For:
Java programmers who are comfortable writing non-object-oriented code and want a guided immersion into the world of object-oriented Java, and intermediate programmers interested in strengthening their foundational knowledge and taking their object-oriented skills to the next level. Even advanced programmers will discover interesting examples and insights in each chapter.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java. ΠœΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½Ρ‹Π΅ процСссоры – это обыдСнная Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° эффСктивноС использованиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° стало Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для создания любого Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов ΠΈ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² для Π·Π°Π΄Π°Ρ‡ распараллСливания стали Π² своС врСмя ΠΏΡ€ΠΎΡ€Ρ‹Π²ΠΎΠΌ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» сами создатСли ΠΏΡ€ΠΎΡ€Ρ‹Π²Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… проСктирования. Π›Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Однако Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, тСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Код пСрСстаСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠ°ΠΊ это Π²Π°ΠΆΠ½Π΅Π΅ всСго: ΠΏΡ€ΠΈ большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅.

Π’ Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ…, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Авторы Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ API ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, ΠΎΠ½ΠΈ знакомят с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ проСктирования, ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ ΠΈ модСлями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ зависят ΠΎΡ‚ вСрсии Java ΠΈ Π½Π° протяТСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»Π΅Ρ‚ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ эффСктивными.

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³Ρƒ Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» для ознакомлСния (бСсплатный PDF Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ правообладатСля), ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈΠ»ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… FB2, PDF, EPUB, TXT, FB3, MOBI.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Автор: Π“Π΅Ρ‚Ρ† Π‘Ρ€Π°ΠΉΠ°Π½, ΠŸΠ°ΠΉΠ΅Ρ€Π»Ρ Π’ΠΈΠΌ, Π‘Π»ΠΎΡ… Π”ΠΆΠΎΡˆΡƒΠ°, Π‘ΠΎΡƒΠ±Π΅Ρ€ Π”ΠΆΠΎΠ·Π΅Ρ„, Π₯олмс Дэвид, Π›ΠΈ Π”Π°Π³
Π“ΠΎΠ΄: 2020
Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: ΠŸΠΈΡ‚Π΅Ρ€
ISBN 978-5-4461-1314-9
Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†: 464
Π―Π·Ρ‹ΠΊ: Русский
Π€ΠΎΡ€ΠΌΠ°Ρ‚: PDF
Π Π°Π·ΠΌΠ΅Ρ€: 7 Mb

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅: ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java. ΠœΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½Ρ‹Π΅ процСссоры β€” это обыдСнная Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° эффСктивноС использованиС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° стало Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для создания любого Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прилоТСния.

Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… классов ΠΈ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² для Π·Π°Π΄Π°Ρ‡ распараллСливания стали Π² своС врСмя ΠΏΡ€ΠΎΡ€Ρ‹Π²ΠΎΠΌ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π’ Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» сами создатСли ΠΏΡ€ΠΎΡ€Ρ‹Π²Π½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°Ρ… проСктирования. Π›Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Однако Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, тСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Код пСрСстаСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠ°ΠΊ это Π²Π°ΠΆΠ½Π΅Π΅ всСго: ΠΏΡ€ΠΈ большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅. Π’ Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β» Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ…, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Авторы Π½Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ API ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°, ΠΎΠ½ΠΈ знакомят с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ проСктирования, ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ ΠΈ модСлями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ зависят ΠΎΡ‚ вСрсии Java ΠΈ Π½Π° протяТСнии ΠΌΠ½ΠΎΠ³ΠΈΡ… Π»Π΅Ρ‚ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ эффСктивными.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Книга Β«Java Concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅Β»

ΠžΡ‚Ρ€Ρ‹Π²ΠΎΠΊ. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вас ΡƒΠ΄ΠΈΠ²ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ связано с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΌΠΊΠ°ΠΌΠΈ (1) Π½Π΅ Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ граТданскоС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ связано с Π·Π°ΠΊΠ»Π΅ΠΏΠΊΠ°ΠΌΠΈ ΠΈ Π΄Π²ΡƒΡ‚Π°Π²Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ Π±Π°Π»ΠΊΠ°ΠΌΠΈ. РазумССтся, ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ мостов Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования большого количСства Π·Π°ΠΊΠ»Π΅ΠΏΠΎΠΊ ΠΈ Π΄Π²ΡƒΡ‚Π°Π²Ρ€ΠΎΠ²Ρ‹Ρ… Π±Π°Π»ΠΎΠΊ, ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС касаСтся построСния ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π·Π°ΠΌΠΊΛ†ΠΎΠ². Но это всСго лишь ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ β€” срСдства достиТСния Ρ†Π΅Π»ΠΈ. НаписаниС потокобСзопасного ΠΊΠΎΠ΄Π° β€” это, ΠΏΠΎ сути, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доступом ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈ, Π² частности, ΠΊ совмСстному (shared) ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ (mutable state).

Π’ Ρ†Π΅Π»ΠΎΠΌ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” это Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, хранящиСся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… состояния (state variables), Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ экзСмплярныС ΠΈ статичСскиС поля ΠΈΠ»ΠΈ поля ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… зависимых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². БостояниС Ρ…Π΅Ρˆ-массива HashMap частично хранится Π² самом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ HashMap, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Map.Entry. БостояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

(1) Π’ тСкстС Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ lock ΠΈ block, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто пСрСводятся ΠΎΠ΄Π½ΠΈΠΌ словом Β«Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°Β», Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ процСсс. Π’ английском языкС для процСсса блокирования ΠΊΠ°ΠΊ приостановки продвиТСния Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ blocking. Под Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ lock имССтся Π² Π²ΠΈΠ΄Ρƒ Β«Π·Π°ΠΌΠΎΠΊΒ», Β«Π·Π°ΠΌΠΊΠΎΠ²Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΒ». Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ lock пСрСводится, ΠΊΠ°ΠΊ Π·Π°ΠΌΠΎΠΊ, ΠΊΡ€ΠΎΠΌΠ΅ ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠΈΡ…ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ принят ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Β«Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°Β». Π—Π°ΠΌΠΎΠΊ β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ контроля доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ с Ρ†Π΅Π»ΡŒΡŽ ΠΈΡ… Π·Π°Ρ‰ΠΈΡ‚Ρ‹. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π°ΠΌΠΊΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСсурс совмСстно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ для Π΅Π³ΠΎ обновлСния Π½Π° ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ основС. β€” ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Π½Π°ΡƒΡ‡. Ρ€Π΅Π΄.

К совмСстной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², мутируСмая β€” мСняСт своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. На самом Π΄Π΅Π»Π΅ ΠΌΡ‹ пытаСмся Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚ Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ доступа Π½Π΅ ΠΊΠΎΠ΄, Π° Π΄Π°Π½Π½Ρ‹Π΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ потокобСзопасного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ синхронизации для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ доступа ΠΊ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ послСдствиям.

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ обращаСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ состояния ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π½Π΅Π΅ ΠΏΠΈΡˆΠ΅Ρ‚, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой доступ ΠΊ Π½Π΅ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синхронизации. Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Java ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово synchronized, Π΄Π°ΡŽΡ‰Π΅Π΅ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ»Π°Ρ‚ΠΈΠ»ΡŒΠ½Ρ‹Π΅ (volatile) ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ явныС Π·Π°ΠΌΠΊΠΈ.

Π£Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ соблазна Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ синхронизации. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ свои тСсты, Π½ΠΎ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ нСисправной ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Если многочислСнныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ состояниС, Π±Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ синхронизации, Ρ‚ΠΎ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° нСисправна. БущСствуСт Ρ‚Ρ€ΠΈ способа Π΅Π΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ:

Π‘ΡƒΠ΄ΡƒΡ‚ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ многочислСнныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡƒΠ·Π½Π°Ρ‚ΡŒ слоТно. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎβ€‘ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π² сопровоТдСнии классы β€” Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ инкапсуляция ΠΈ сокрытиС Π΄Π°Π½Π½Ρ‹Ρ…, β€” Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ потокобСзопасныС классы. Π§Π΅ΠΌ мСньшС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π―Π·Ρ‹ΠΊ Java Π½Π΅ заставляСт вас ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ состояниС β€” Π²ΠΏΠΎΠ»Π½Π΅ допустимо Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… полях (Π΄Π°ΠΆΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… статичСских полях) ΠΈΠ»ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΈΠ½Ρ‹Ρ… случаях являСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ, β€” Π½ΠΎ Ρ‡Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ инкапсулировано состояниС вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ потокобСзопасной ΠΈ ΠΏΠΎΠΌΠΎΡ‡ΡŒ сопроводитСлям ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ потокобСзопасных классов Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎβ€‘ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ тСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: инкапсуляция, Π½Π΅ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ чСткая спСцификация ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” Π±ΡƒΠ΄ΡƒΡ‚ вашими ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΠ°ΠΌΠΈ.

Если Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎβ€‘ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Π΅ тСхничСскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ расходятся с потрСбностями Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, стоит ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ проСктирования Ρ€Π°Π΄ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Иногда абстракция ΠΈ инкапсуляция расходятся с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ β€” хотя ΠΈ Π½Π΅ Ρ‚Π°ΠΊ часто, ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, β€” Π½ΠΎ образцовая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сначала Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ β€” быстрым. Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли измСрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ потрСбности говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ обязаны это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ (2).

(2) Π’ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ слСдуСт ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этой ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π΄Π°ΠΆΠ΅ большС, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ошибки конкурСнтности Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ воспроизводимы ΠΈ Π½Π΅ просты Π² ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, прСимущСство нСбольшого прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… вСтвях ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ½Ρ‹ΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с риском, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π² условиях эксплуатации.

Если Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, Ρ‚ΠΎ Π½Π΅ всС потСряно. Π’Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ по‑прСТнСму ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ потокобСзопасной, Π½ΠΎ процСсс Π±ΡƒΠ΄Π΅Ρ‚ слоТнСС ΠΈ Π΄ΠΎΡ€ΠΎΠΆΠ΅, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅. Π“Π»Π°Π²Π° 4 Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ бСзопасно ΡΠΌΡΠ³Ρ‡Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… состояния.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ использовали Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ «потокобСзопасный класс» ΠΈ «потокобСзопасная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Β» ΠΏΠΎΡ‡Ρ‚ΠΈ взаимозамСняСмо. Бтроится Π»ΠΈ потокобСзопасная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ· потокобСзопасных классов? НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая состоит ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ· потокобСзопасных классов, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ потокобСзопасной, ΠΈ потокобСзопасная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ потокобСзопасными. Вопросы, связанныС с ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ потокобСзопасных классов, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π΅ 4. Π’ любом случаС понятиС потокобСзопасного класса ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли класс инкапсулируСт собствСнноС состояниС. Π’Π΅Ρ€ΠΌΠΈΠ½ Β«ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΒ» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ΄Ρƒ, Π½ΠΎ ΠΎΠ½ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ состоянии ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ массиву ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ инкапсулируСт Π΅Π³ΠΎ состояниС (это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ).

2.1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ?

Π”Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ потокобСзопасности нСпросто. Быстрый поиск Π² Google Π²Ρ‹Π΄Π°Π΅Ρ‚ многочислСнныС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ этим:

… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· многочислСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ двумя ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½Π΅ трСбуя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… дСйствий с Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороны.

Учитывая ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ опрСдСлСния, Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎΠΉ! Как ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ потокобСзопасный класс ΠΎΡ‚ нСбСзопасного? Π§Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ словом «бСзопасный»?

Π’ основС любого Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ³ΠΎ опрСдСлСния потокобСзопасности Π»Π΅ΠΆΠΈΡ‚ понятиС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (correctness).

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ соотвСтствиС класса своСй спСцификации. БпСцификация опрСдСляСт ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ (invariants), ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ постусловия (postconditions), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ эффСкты ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ спСцификации для классов ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ? Никак, Π½ΠΎ это Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π½Π°ΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈ сСбя, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ допустим, Ρ‡Ρ‚ΠΎ однопоточная ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” это Π½Π΅Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ потокобСзопасный класс Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²ΠΎ врСмя доступа ΠΈΠ· многочислСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Класс являСтся потокобСзопасным, Ссли ΠΎΠ½ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²ΠΎ врСмя доступа ΠΈΠ· многочислСнных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² планируСтся ΠΈΠ»ΠΈ пСрСмСТаСтся Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдой, ΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ синхронизации ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ со стороны Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ потокобСзопасной, Ссли ΠΎΠ½Π° Π½Π΅ являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π΄Π°ΠΆΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС (3). Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ никакая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ β€” обращСния ΠΊ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ поля β€” Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ постусловия. Ни ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, выполняСмых ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎ Π½Π° экзСмплярах потокобСзопасного класса, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚ΡŒ экзСмпляр Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² нСдопустимом состоянии.

(3) Если нСстрогоС использованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ здСсь вас бСспокоит, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ потокобСзопасном классС ΠΊΠ°ΠΊ ΠΎ классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСисправСн Π² ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠΉ срСдС, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС.

ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹Π΅ классы ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ Π»ΡŽΠ±ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ сами ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

2.1.1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: сСрвлСт Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния

Π’ Π³Π»Π°Π²Π΅ 1 ΠΌΡ‹ пСрСчислили структуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ· Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… отвСтствСнны Π²Ρ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡΠ΅Ρ€Π²Π»Π΅Ρ‚Π½ΡƒΡŽ слуТбу разлоТСния Π½Π° ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ ΠΈ постСпСнно Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», сохраняя ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

Π’ листингС 2.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ простой сСрвлСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ распаковываСт число ΠΈΠ· запроса, раскладываСт Π΅Π³ΠΎ Π½Π° ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΎΡ‚ΠΊΠ»ΠΈΠΊ.

Листинг 2.1. Π‘Π΅Ρ€Π²Π»Π΅Ρ‚ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния

Класс StatelessFactorizer, ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сСрвлСтов, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния: Π½Π΅ содСрТит ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π½Π΅ ссылаСтся Π½Π° поля ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. БостояниС для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ вычислСния сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ стСкС ΠΈ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Один ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊ StatelessFactorizer, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π΄Π΅Π»Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ состояниС совмСстно.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния всСгда ΡΠ²Π»ΡΡŽΡ‚ΡΡ потокобСзопасными.

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сСрвлСтов ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт брСмя ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ потокобСзопасности самих сСрвлСтов. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° сСрвлСты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, трСбования ΠΊ ΠΈΡ… потокобСзопасности Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‚.

2.2. ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ

Π§Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта состояния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния? ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ счСтчик посСщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСряСт число ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… запросов. МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² сСрвлСт ΠΏΠΎΠ»Π΅ с Ρ‚ΠΈΠΏΠΎΠΌ long ΠΈ ΠΏΡ€ΠΈΡ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запросС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² UnsafeCountingFactorizer Π² листингС 2.2.

Листинг 2.2. Π‘Π΅Ρ€Π²Π»Π΅Ρ‚, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ запросы Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ синхронизации. Π’Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ слСдуСт

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

К соТалСнию, класс UnsafeCountingFactorizer Π½Π΅ являСтся потокобСзопасным, Π΄Π°ΠΆΠ΅ Ссли ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ UnsafeSequence, ΠΎΠ½ прСдрасполоТСн ΠΊ потСрянным обновлСниям (lost updates). Π₯отя опСрация приращСния ++count ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ синтаксис, ΠΎΠ½Π° Π½Π΅ являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ (atomic), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Π΄Π΅Π»ΠΈΠΌΠΎΠΉ, Π° прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ: доставки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния, прибавлСния ΠΊ Π½Π΅ΠΌΡƒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈ записи Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’ опСрациях Β«ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΒ» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ состояниС являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

На рис. 1.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π±Π΅Π· синхронизации. Если счСтчик Ρ€Π°Π²Π΅Π½ 9, Ρ‚ΠΎ из‑за Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° увидят Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 9, добавят Π² Π½Π΅Π³ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΈ установят Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10. Π’Π°ΠΊ счСтчик посСщСний Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΎΡ‚ΡΡ‚Π°Π²Π°Ρ‚ΡŒ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ счСтчика посСщСний Π² вСб‑слуТбС являСтся ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° это Ρ‚Π°ΠΊ. Но Ссли счСтчик ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ значСния ΠΈΠ· многочислСнных Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ цСлостности Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появлСния Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΈΠ·-Π·Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Λ†ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ состоянии Π³ΠΎΠ½ΠΊΠΈ.

2.2.1. Бостояния Π³ΠΎΠ½ΠΊΠΈ

Класс UnsafeCountingFactorizer ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько состояний Π³ΠΎΠ½ΠΊΠΈ (4). НаиболСС распространСнным Ρ‚ΠΈΠΏΠΎΠΌ состояния Π³ΠΎΠ½ΠΊΠΈ являСтся ситуация Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΒ», Π³Π΄Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π΅ наблюдСниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС.

(4) Π’Π΅Ρ€ΠΌΠΈΠ½ состояниС Π³ΠΎΠ½ΠΊΠΈ часто ΠΏΡƒΡ‚Π°ΡŽΡ‚ с родствСнным Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ Π³ΠΎΠ½ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… (data race). Π“ΠΎΠ½ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° синхронизация Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ всСго доступа ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Π½Π΅Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ полю. Π’Ρ‹ рискуСтС ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π³ΠΎΠ½ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π»ΠΈΠ±ΠΎ считываСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая Π² послСдний Ρ€Π°Π· ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ записана Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Ссли ΠΎΠ±Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ. Код с Π³ΠΎΠ½ΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сСмантики Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти Java. НС всС состояния Π³ΠΎΠ½ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³ΠΎΠ½ΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π½Π΅ всС Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ состояниями Π³ΠΎΠ½ΠΊΠΈ, Π½ΠΎ ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ° ситуаций ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Π²Π°Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ сбой ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ самым нСпрСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. UnsafeCountingFactorizer содСрТит ΠΎΠ±Π° Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… описаны Π² Π³Π»Π°Π²Π΅ 16.

ΠœΡ‹ часто сталкиваСмся с состояниСм Π³ΠΎΠ½ΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ. Допустим, Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² полдСнь Π² ΠΊΠ°Ρ„Π΅ «Бтарбакс» Π½Π° УнивСрситСтском проспСктС. Но Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π° УнивСрситСтском проспСктС находятся Π΄Π²Π° «Бтарбакса». Π’ 12:10 Π²Ρ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ своСго Π΄Ρ€ΡƒΠ³Π° Π² ΠΊΠ°Ρ„Π΅ A ΠΈ ΠΈΠ΄Π΅Ρ‚Π΅ Π² ΠΊΠ°Ρ„Π΅ B, Π½ΠΎ Ρ‚Π°ΠΌ Π΅Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚. Π›ΠΈΠ±ΠΎ ваш Π΄Ρ€ΡƒΠ³ ΠΎΠΏΠ°Π·Π΄Ρ‹Π²Π°Π΅Ρ‚, Π»ΠΈΠ±ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ±Ρ‹Π» Π² ΠΊΠ°Ρ„Π΅ A сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΡˆΠ»ΠΈ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ Π±Ρ‹Π» Π² ΠΊΠ°Ρ„Π΅ B, Π½ΠΎ пошСл вас ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ находится Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ ΠΊΠ°Ρ„Π΅ A. ΠŸΡ€ΠΈΠΌΠ΅ΠΌ послСдний, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ самый Ρ…ΡƒΠ΄ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. БСйчас 12:15, ΠΈ Π²Ρ‹ ΠΎΠ±Π° Π·Π°Π΄Π°Π΅Ρ‚Π΅ΡΡŒ вопросом, Π° сдСрТал Π»ΠΈ Π΄Ρ€ΡƒΠ³ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅. Π’Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΊΠ°Ρ„Π΅? Бколько Ρ€Π°Π· Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ? Если Π²Ρ‹ Π½Π΅ согласовали ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ провСсти вСсь дСнь, гуляя ΠΏΠΎ УнивСрситСтскому проспСкту Π² ΠΊΠΎΡ„Π΅ΠΈΠ½ΠΎΠ²ΠΎΠΉ эйфории.
ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Β«ΠΏΡ€ΠΎΠ³ΡƒΠ»ΡΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π½Π΅ находится Π»ΠΈ ΠΎΠ½ Ρ‚Π°ΠΌΒ» Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³ΡƒΠ»ΠΊΠ° ΠΏΠΎ ΡƒΠ»ΠΈΡ†Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΊΠ°Ρ„Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ нСсколько ΠΌΠΈΠ½ΡƒΡ‚, ΠΈ Π·Π° это врСмя состояниС систСмы ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ со «Бтарбаксом» ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ событий (ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ‹ ΠΆΠ΄Π΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³Π°, Π½Π°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΊΠ°Ρ„Π΅, ΠΈ Ρ‚. Π΄.). НаблюдСниС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ находится Π² ΠΊΠ°Ρ„Π΅ A, становится ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡƒΡ‚Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΌ силу: ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΠ· ΠΏΠ°Ρ€Π°Π΄Π½ΠΎΠΉ Π΄Π²Π΅Ρ€ΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· заднюю Π΄Π²Π΅Ρ€ΡŒ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ состояний Π³ΠΎΠ½ΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, пСрСзаписанныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°.

2.2.2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: состояния Π³ΠΎΠ½ΠΊΠΈ Π² Π»Π΅Π½ΠΈΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

РаспространСнным ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΒ», являСтся лСнивая инициализация (LazyInitRace). Π•Π΅ Ρ†Π΅Π»ΡŒ β€” ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ понадобится, ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ инициализировался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ листингС 2.3 ΠΌΠ΅Ρ‚ΠΎΠ΄ getInstance убСТдаСтся Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ExpensiveObject ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр, ΠΈΠ»ΠΈ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ послС сохранСния ссылки Π½Π° Π½Π΅Π³ΠΎ.

Листинг 2.3. БостояниС Π³ΠΎΠ½ΠΊΠΈ Π² Π»Π΅Π½ΠΈΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ слСдуСт

java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf. Π€ΠΎΡ‚ΠΎ java concurrency Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ pdf

Класс LazyInitRace содСрТит состояния Π³ΠΎΠ½ΠΊΠΈ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ A ΠΈ B Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getInstance Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. A Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ instance Ρ€Π°Π²Π½ΠΎ null, ΠΈ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ExpensiveObject. ΠŸΠΎΡ‚ΠΎΠΊ B Ρ‚Π°ΠΊΠΆΠ΅ провСряСт, Ρ€Π°Π²Π½ΠΎ Π»ΠΈ ΠΏΠΎΠ»Π΅ instance Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ null. НаличиС Π² ΠΏΠΎΠ»Π΅ значСния null Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ зависит ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Λ†ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠ°ΠΏΡ€ΠΈΠ·Ρ‹ планирования ΠΈ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ для создания экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ExpensiveObject ΠΈ установки значСния Π² ΠΏΠΎΠ»Π΅ instance. Если ΠΏΠΎΠ»Π΅ instance Ρ€Π°Π²Π½ΠΎ null, ΠΊΠΎΠ³Π΄Π° B Π΅Π³ΠΎ провСряСт, Π΄Π²Π° элСмСнта ΠΊΠΎΠ΄Π°, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ getInstance, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, Π΄Π°ΠΆΠ΅ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ getInstance ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ экзСмпляр.

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ посСщСний Π² UnsafeCountingFactorizer Ρ‚ΠΎΠΆΠ΅ содСрТит состояния Π³ΠΎΠ½ΠΊΠΈ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ Β«ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΒ» ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для приращСния счСтчика ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² процСссС обновлСния Π½ΠΈΠΊΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅ измСняСт ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ошибок конкурСнтности, состояния Π³ΠΎΠ½ΠΊΠΈ Π½Π΅ всСгда приводят ΠΊ сбою: врСмСнная координация Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ. Но Ссли класс LazyInitRace ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для инстанциации рССстра всСго прилоТСния, Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ· многочислСнных Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΉ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ экзСмпляры, рСгистрации Π±ΡƒΠ΄ΡƒΡ‚ утСряны Π»ΠΈΠ±ΠΎ дСйствия ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Π΅ прСдставлСния Π½Π°Π±ΠΎΡ€Π° зарСгистрированных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Или Ссли класс UnsafeSequence ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для гСнСрирования ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² сущностСй Π² структурС консСрвации Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½Π°Ρ€ΡƒΡˆΠ°Ρ ограничСния идСнтичности.

2.2.3. БоставныС дСйствия

И LazyInitRace, ΠΈ UnsafeCountingFactorizer содСрТат ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ. Но для прСдотвращСния состояния Π³ΠΎΠ½ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ прСпятствиС Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ использовали ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π΅Π΅ измСняСт.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ A ΠΈ B ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ, Ссли, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ A, опСрация B Π»ΠΈΠ±ΠΎ Π±Ρ‹Π»Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Π»ΠΈΠ±ΠΎ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄Π°ΠΆΠ΅ частично.

ΠΡ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ приращСния Π² UnsafeSequence ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ состояния Π³ΠΎΠ½ΠΊΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° рис. 1.1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΈ Β«ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΒ» всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ. Они Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ составными дСйствиями (сompound actions) β€” ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ потокобСзопасными. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ β€” встроСнный Π² Java ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ. А ΠΏΠΎΠΊΠ° ΠΌΡ‹ исправим ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ потокобСзопасный класс, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Countingfactorizer Π² листингС 2.4.

Листинг 2.4. Π‘Π΅Ρ€Π²Π»Π΅Ρ‚, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ запросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AtomicLong

ΠŸΠ°ΠΊΠ΅Ρ‚ java.util.concurrent.atomic содСрТит Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (atomic variable) для управлСния состояниями классов. Π—Π°ΠΌΠ΅Π½ΠΈΠ² Ρ‚ΠΈΠΏ счСтчика с long Π½Π° AtomicLong, ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ всС дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ счСтчика, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ1. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ состояниС сСрвлСта являСтся состояниСм счСтчика, Π° счСтчик являСтся потокобСзопасным, наш сСрвлСт становится потокобСзопасным.

ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ СдинствСнного элСмСнта состояния Π² класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ класс Π±ΡƒΠ΄Π΅Ρ‚ потокобСзопасным, Ссли состояниС ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ управляСтся потокобСзопасным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Но, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ состояния ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ прост, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ нуля ΠΊ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅.

Π’Π°ΠΌ, Π³Π΄Π΅ это ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ потокобСзопасныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ AtomicLong, для управлСния состояниСм вашСго класса. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ состояния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… потокобСзопасных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ состояния Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ состояния.

Для Π₯Π°Π±Ρ€ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ скидка 25% ΠΏΠΎ ΠΊΡƒΠΏΠΎΠ½Ρƒ β€” Java

По Ρ„Π°ΠΊΡ‚Ρƒ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π±ΡƒΠΌΠ°ΠΆΠ½ΠΎΠΉ вСрсии ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° e-mail высылаСтся элСктронная ΠΊΠ½ΠΈΠ³Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *