2014年6月27日

[FMW] Fusion Middleware 12c (12.1.3) arrived!

Fusion Middleware 12c (12.1.3.0.0) がリリースされました。OTNから既にダウンロードできるようになっています。Oracle Softweare Delivery Cloud(旧e-Delivery)からのダウンロードは少々お待ち下さい。今回リリースされるコンポーネントは以下のようなものです。
  • Oracle WebLogic Server 12c (12.1.3.0.0)
  • Oracle Coherence 12c (12.1.3.0.0)
  • Oracle TopLink 12c (12.1.3.0.0)
  • Oracle Fusion Middleware Infrastructure 12c   (12.1.3.0.0)
  • Oracle HTTP Server 12c (12.1.3.0.0)
  • Oracle SOA Suite and Business Process Management 12c (12.1.3.0.0)
  • Oracle MapViewer 12c (12.1.3.0.0)
  • Oracle B2B and Healthcare 12c (12.1.3.0.0)
  • Oracle Service Bus 12c (12.1.3.0.0)
  • Oracle Event Processing 12c (12.1.3.0.0)
  • Oracle Managed File Transfer 12c (12.1.3.0.0)
  • Oracle Data Integrator 12c (12.1.3.0.0)
  • Oracle Enterprise Data Quality 12c (12.1.3.0.0)
  • Oracle Data Service Integrator 12c (12.1.3.0.0)
  • Oracle GoldenGate Monitor and Veridata 12c (12.1.3.0.0)
  • Oracle JDeveloper 12c (12.1.3.0.0)
  • Oracle Enterprise Pack for Eclipse 12c (12.1.3.0.0)
OTNのFusion Middlewareページには製品に関する様々な情報がありますので、是非ご覧下さい。
Oracle Fusion Middleware - Middleware Application Infrastructure
http://www.oracle.com/us/products/middleware/overview/index.html 
参考資料は以下のリンクからどうぞ。

2014年6月26日

[Java, BigData] OTN Virtual Technology Summit

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/otn_virtual_technology_summit

Oracle Technology Network (OTN)がVirtual Technology Summit(以下、VTS)という新しいタイプのイベントを開催します。VTSはオンラインで開催するイベントで、Database、Middleware、Systems、そしてもちろん、Javaといった幅広いトピックを取り扱います。これらのトピックをOracleだけでなく、コミュニティの専門家もプレゼンテーションします!

最初のVTSは7月に開催します。異なる時間帯に対応するため。3回開催します(内容は同じです)。
  • 7月9日(水)(登録はこちら
    • (PDT)9時から13時
  • 7月10日(木)(登録はこちら
    • (BST)9時から13時
    • (CET)10時から14時
    • (MSK、GST)12時から16時
  • 7月16日(水)(登録はこちら
    • (IST)10時から
    • (SGT)12時30分から
    • (AEST)14時30分から
    • (JST)13時30分から
Javaトラックでは、以下のセッションを予定しています。

Efficient architectures for creating MapReduce Pipelines 
(Fabiane Nardon, Java Champion and Big Data Expert)

演算、集計、分析、変換:実世界のデータサイエンス・アプリケーションは、通常、複数の処理ステップを実行します。各ステップでは、データにより多くの価値を追加します。効率的な方法でこれらの処理パイプラインを設計し、コーディネートするためには、基礎となるメカニズムであるMapReduceアルゴリズムの理解と、数テラバイトの処理後にのみわかるいくつかのトリックが必要です。このプレゼンテーションでは、MapReduceに取り組むときに実際に役に立つ、効率よいMapReduceパイプラインの設計方法、パイプラインをRedis、MongoDBやリレーショナルデータベースといった外部データソースと連係する方法、最適なジョブ粒度の決定方法をご紹介します。

JavaScript/HTML5 Rich Clients Using Java EE 7
(Reza Rahman, Java Evangelist and Java EE Expert)

HTML5での大きな変化は、Struts2やJSFのような、今日のシンクライアントベースのサーバーサイドWebフレームワークから、JavaScriptを使った次世代リッチクライアントに振れようとしています。RESTやWebSocket、JSONを強力にサポートしているので、Java EEは、この変化に適応するような位置にあります。この非常にコードを中心としたセッションでは、AngularJS、Backbone、Knockout、とEmberといった今日最も人気のあるJavaScriptのリッチクライアント技術を利用して、JAX-RS、JSR356/WebSocket、JSON-P、CDI、Bean Validationを使いJava EEの強みを利用するする方法を紹介します。、また、project AvatarというOracle独自のJavaScriptのリッチクライアントソリューションのコードもご紹介します。

How to Become an Embedded Developer
(Angelia Caicedo, Java Evangelist and Java Embedded Expert)

組み込みJavaを使用してInternet f Thingsの世界に飛び込みましょう。このセッションでは、GPIOやI2Cデバイスの使用方法の実例をご紹介しながら、組み込みJavaアプリケーションを作り始めるために必要な手順を説明します。組み込みデバイスのプログラミングが非常に簡単で、楽しいことを知ってもらえることでしょう。

Javaコミュニティの最高の人材から学ぶこの機会をお見逃しなく。是非登録してください!

2014年6月20日

[Database] New whitepaper: Manageability with Oracle Database 12c

原文はこちら。
https://blogs.oracle.com/emeapartnermanageability/entry/new_whitepaper_manageability_with_oracle

先進的な企業は、積極的に新しいテクノロジーソリューションを採用し自社の競争力や収益力を強化しています。その結果として、管理に対する課題が増大しています。Oracle Database 12cでは、データベース管理者がデータベースのパフォーマンスをピークレベルで維持し、新しいテクノロジーを迅速かつリスク無しで採用し、日常の管理タスクを自動化してDBAの生産性とシステムの可用性を向上できるようにすることで、こうした重要な課題に対処しています。Oracle Enterprise Manager Cloud Control 12cで管理するOracle Database 12cは、次世代のDBAに対し次世代のデータベース管理機能を提供します。

是非この新しいホワイトペーパー「Manageability with Oracle Database 12c」をダウンロードして一読ください!
Oracle Database 12c Manageability and Real Application Testing Overview
http://www.oracle.com/technetwork/database/manageability/database-manageability-wp-12c-1964677.pdf

2014年6月19日

[Java] JavaOne Java EE Track Content Finalized (A Detailed Preview)

原文はこちら。
https://blogs.oracle.com/reza/entry/javaone_java_ee_track_content

JavaOne Java EEトラックの内容がまとまり、ご紹介できるようになったことをうれしく思います。このエントリでは、概略ですが少々細かく、今年のJava EEトラックの主要なコンテンツ、目玉のスピーカーをご紹介しましょう。なお、JavaOne 2014は9月28日から10月2日までサンフランシスコで開催されます。登録は以下のリンクからどうぞ。
JavaOne 2014
https://www.oracle.com/javaone/index.html

Thank You, Regrets and Being Persistent

まず第一に、時間をかけてトラックへの講演内容を作成し、申し込んでくださった皆様に個人的に感謝申し上げます。みなさまの情熱と専心のおかげで、全体として、コミュニティのための非常に強力なオファリングを構築できました。これは皆様のセッションを確認することによってわかる特権でした。 JavaOneは、Oracleの壁をはるかに越えて、世界的なJavaコミュニティの重要な要素であり、皆様がJavaOneの成功を維持する大きな要素です。実際今年は、コミュニティからの講演者や、皆様の仲間であるJava EEのユーザーからの実導入例を増やし、Oracleのスピーカーを最小限に抑えることができたことを誇りに思っています。

投稿されたセッションが受け入れられた方に対しては、JavaOneでの皆様の優れたセッションを楽しみにしています。セッションが受け入れられなかった皆様には特に感謝を申し上げたく思っています。落胆せずに、JavaOneへの聴衆としての参加を検討されることを願っております。セッションが受け入れられなかった、ということは、あなたの提案が素敵なものではなかった、ということではありません。今年のJava EEトラックでは運良く、よりこのトラックにフィットする投稿があった、ということです。だからこそ、あなたの提案を磨き上げ、来年も是非挑戦してください。一方で、ご質問があれば躊躇せずお知らせください。長期的にみて、JavaOneにとって有用になるはずだからです。

コンテンツ

わかりやすいように勝手にトラックの主要なセッションをカテゴリに分類してみました。コンテンツカタログはまもなく公開される予定です。ご覧いただき、セッションの登録ができるようになるはずです。

将来のJava EE JSRs

  • Java EE 8
  • Java EE 8 Community Update and Panel (major vendors and community)
  • HTTP 2 Comes to Java: What Servlet 4 Means to You
  • Using the New JCache
  • Java API for JSON Binding: Introduction and Update
  • Let's Talk JAX-RS.next!
  • The Path to CDI 2
  • Going Farther with CDI 1.2
  • A First Draft of Java EE Configuration
  • What Do We Want in JMS 2.1? (Birds-of-a-Feather)
  • What's Next for JSF? (Birds-of-a-Feather)
  • What's Next for the WebSocket API?
  • JSON Pointer and JSON Patch: Updates to the Java API for JSON Processing
  • JSR 347 Reboot: An Update on a Standard Data Grid API for Java (Birds-of-a-Feather)
  • Meet the Java EE Specification Leads (Birds-of-a-Feather)

ケーススタディ・実例

  • Java EE 6 Adoption in One of the World's Largest Online Financial Systems (Rakuten)
  • eBay, Connecting Buyers and Sellers Globally via JavaServer Faces
  • Bean Validation: Practical Examples from a Real-World Java EE 7 Application (Harvard University)
  • Migrating a JSF-Based Web Application from Spring 3 to Java EE 7 and CDI
  • JPA Gotchas and Best Practices: Lessons from Overstock.com
  • Lessons Learned from Real-World Deployments of Java EE 7 (WildFly/JBoss/Red Hat)
  • Java EE 7 Batch Processing in the Real World

ベストプラクティスおよびデザインパターン

  • Java EE Game Changers
  • Java EE 7 Recipes
  • 50 JMS 2 Best Practices in 50 Minutes
  • Lazy Versus Eager Loading Strategies for JPA 2.1
  • 50 EJB 3 Best Practices in 50 Minutes
  • JavaServer Faces Antipatterns and Best Practices
  • Applied Domain-Driven Design Blueprints for Java EE
  • Java SE 8 Features for Java EE 7 Developers
  • Java EE 7 and Spring 4: A Shootout

コミュニティ

  • Adopt-a-JSR for Java EE 7 and Java EE 8
  • GlassFish Community BOF
  • Calling All GlassFish Users and User Groups: Please Contribute to GlassFish
  • PrimeTime JSF with PrimeFaces 5
  • Apache TomEE, Java EE Web Profile, and More on Tomcat

ハンズオンおよびチュートリアル

  • Java EE 101 (Hands-on-Lab)
  • JSR107: Come, Code, Cache, Compute! (Tutorial)
  • JavaScript/HTML5 Rich Clients Using Java EE 7 (Tutorial)
  • Hybrid Mobile Development with Apache Cordova and Java EE 7 (Tutorial)
  • Building Secure Applications with Java EE (Tutorial)
  • JSF 2.2 Deep Dive (Tutorial)

Oracleの主な講演者

  • David Delabassee (Java EE evangelist)
  • Geertjan Wielenga (NetBeans evangelist)
  • Bruno Borges (Java EE evangelist)
  • Yoshio Terada (Japanese Java EE evangelist)
  • Bill Shannon (Java EE specification lead)
  • Linda Demichiel (Java EE specification lead)
  • Edward Burns (JSF, Servlet specification lead, author, speaker)
  • Santiago Pericasgeertsen (JAX-RS specification lead)
  • Marek Potociar (JAX-RS specification lead)
  • Nigel Deakin (JMS specification lead)
  • Heather Vancura (JCP)

コミュニティからの主な講演者

  • Adam Bien (JavaOne Rock Star, Java EE author, speaker, consultant)
  • David Blevins (JavaOne Rock Star, Apache TomEE project lead)
  • Arun Gupta (JavaOne Rock Star, director of developer advocacy, Red Hat)
  • Emmanuel Bernard (Bean Validation, Hibernate OGM lead, Red Hat)
  • Antoine Sabot-Durand (CDI specification lead, Red Hat)
  • Pete Muir (CDI specification lead, Red Hat)
  • Greg Luck (JCache, Ehcache lead, Hazlecast)
  • Cagatay Civici (PrimeFaces lead)
  • Kito Mann (Java EE author, speaker, consultant)
  • Anatole Tresch (Java EE configuration specification lead, Credit Suisse)
  • Patrycja Wegrzynowicz
  • Peter Pilgrim (Java EE author, speaker, consultant)
  • Steve Millidge (London GlassFish User Group, C2B2 Consulting)
  • Ryan Cuprak (JavaOne Rock Star, Java EE author, speaker and JUG leader)
  • David Heffelfinger (Java EE author, consultant)
  • Josh Juneau (Java EE author)

Cloudやその他のトラック

JavaOneでは、Java EEのトラックに加えて、クラウドトラックだけでなく、その他のすばらしいトラックが当然ながらあります。クラウドトラックには、SaaS、PaaS、IaaS、マルチテナント、仮想化、OpenStack、NoSQL、MongoDB、Neo4j、ビッグデータ/ Hadoop、DevOps、jcloudsやmodularity/OSGiといった素敵な内容を、Alexis Moussine-Pouchkine (Google Developer Advocacy、以前のJava EE evangelist)やMark Little (JBoss CTO, Red Hat Vice President)といったすばらしいスピーカーがお届けします。他のトラックでも、他の多くの世界クラスのスピーカーならびに、Java SE 8や、NetBeans、アジャイル開発やJavaFXなど、Java開発者に関連したユニークなコンテンツを取り揃えています。

是非皆様とJavaOneでお会いしたいと思っています。来たる数週間、数ヶ月で、JavaOneのJava EEトラック、内容、講演者の詳細を共有する予定です。最後に、様々な理由でJavaOneへの参加が現実的でない場合があるかもしれません。思い起こして欲しいのですが、私たちはすべてのJavaOneのコンテンツがオープンに広く遍くご利用いただけるように留意しています。
JavaOne 2013のセッション動画
http://www.parleys.com/channel/5243df06e4b0d1fb3c78fe31/presentations?sort=date&state=public
それはそれとして、少なくとも一度はJava開発者として、JavaOneに参加するべきとお伝えしたいのです。私はトータルで7回参加しましたが、そのほとんどは、自営業コンサルタントとして自費での参加でした。

2014年6月4日

[Java] Java EE 8 update

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/java_ee_8_update

Java EE 8のプランニングが現在順調に進んでいます。ご存知のように、数週間前に3回のJava EE 8 Community Surveyを実施しました(最終結果は以下のリンクからどうぞ)。
Final Results from our Java EE 8 Community Survey
https://glassfish.java.net/survey/
収集したデータは次のステップに多大な影響を与えました。今後数週間、数ヶ月にわたって、Java EEプラットフォームを構成する様々な仕様の最新情報を確認することができます。
CDI 2のSurveyのように、どこに注力すべきかといった追加のフィードバックを得るために多忙なスペックリードもいれば、自分が率いている仕様の進化のために注力すべきと考えていることを既に公にしているスペックリードもいます。
Contexts and Dependency Injection :: CDI 2.0 Survey
http://www.cdi-spec.org/news/2014/05/28/CDI-2_0-survey/
例えば、Server-Sent Events (SSE)のサポートをJAX-RSに追加するかどうかを議論していたり、MVCのサポートを追加することを議論していたりします。
[jax-rs-spec users] [jsr339-experts] Fwd: [javaee-spec users] [jsr342-experts] Server-Sent Events in Java EE 8
https://java.net/projects/jax-rs-spec/lists/users/archive/2014-05/message/3
[jax-rs-spec users] [jsr339-experts] MVC
https://java.net/projects/jax-rs-spec/lists/users/archive/2014-05/message/7
覚えていてほしいのは、現在ある機能を議論しているという事実が、ProposalやJava EEのアップデートにその機能が含まれるということを保証するものではない、ということです。様々な仕様の確定が近づくにつれて、追加の機能強化、変更や進化を期待できますが、これらの仕様提案にはまだ長い道のりがあるのです。

Java EEの共同スペックリードであるLinda DeMichielは、先ほどJava EE 8プラットフォーム仕様のドラフト版の提案を投稿しました。
[javaee-spec users] [jsr342-experts] Java EE 8 JSR
https://java.net/projects/javaee-spec/lists/users/archive/2014-05/message/0
Lindaの目的は、JCPに提出する前にこの提案をサポートする人や企業を募ることにあります。
このドラフト版の提案は非常に興味深いもので、以下のようなJava EE 8の計画に関連する情報が含まれています。
  • テーマ
    • Support for the latest web standards(HTTP 2.0のような最新のWeb標準のサポート)
    • Continue to work on ease of development(引き続き開発を容易にする仕組みを提供)
    • Improve the infrastructure for cloud support(クラウドをサポートするための基盤の改善)
    • Alignment with Java SE 8(Java SE 8との整合)
  • プラットフォームに追加すべき新しいJSR
    • J-Cache
    • Java API for JSON Binding
    • Java Configuration
  • Plans for the Web Profile(Web Profileの計画)
  • Plans on technologies to prune in Java EE 8(Java EE 8で廃止するテクノロジーの計画)など
まだご覧になっていないなら、是非Java EE 8のドラフト提案をご一読されることをお進めします。
[jsr342-experts] Java EE 8 JSR
https://java.net/projects/javaee-spec/lists/jsr342-experts/archive/2014-05/message/0
Java EE 8仕様のゴールは、2016年下半期で最終化することです。重要なことは、現在Java EE 8の初期段階でありこの段階では(テーマやコンテンツ、タイミングなどの)全てが暫定的なものです。まだまだ様々なJava Community Process(JCP)の専門家グループ(Expert Group)と議論したり異議申し立て、同意したりする必要があります。これから構成する必要があるあるExpert Groupがあります。これはつまり、様々なExpert Groupでの進行を追跡するためにロードマップの調整が必要であることを意味しています。

これはまた、こうした将来設置されるJCP Expert Groupへの参加が奨励されていることを思い出させるための良い機会でもあります。
Participation Overview: Getting Involved
https://jcp.org/ja/participation/overview
Expert Groupに貢献することで、Java EE8の行く末に効果的に影響を及ぼすことができます。物事がより具体的になるに従い、さまざまなJava EE8関連のAdopt-a-JSRイニシアチブへの関わりに関することや、別の貢献方法に関する詳細をお知らせできることでしょう。
Adopt a JSR Program
https://java.net/projects/adoptajsr/pages/Home
このThe AquariumでJava EE 8に関連する他の記事を読むこともできます。 'javaee8'タグが付いている記事を探してください。

[Java] Oracle and Cavium to work together on Java SE 8 on 64-bit ARMv8

原文はこちら。
https://blogs.oracle.com/henrik/entry/oracle_and_cavium_to_work

新しいARMv8マイクロアーキテクチャに基づく64bitサーバーを将来導入することに対し、標準のOracle JDK 8の移植で時間をかけて取り組んできました。CaliforniaのSanta Claraで開催されたARM TechCon 2013にて、2015年にはリリースできるであろう、というロードマップを発表しました。
ARM TechCon 2013: Oracle, ARM expand collaboration on servers, Internet of Things
https://blogs.oracle.com/henrik/entry/armtechcon2013
このプロジェクトは順調に進行していて、スケジュールを前倒ししており、まもなく、Oracleからバイナリをリリースできる段階に到達します。まずは特定のお客様やパートナー様対象にベータプログラムを実施し、その後2014年秋ごろにパブリックな早期アクセスプログラムを開催する予定です。変更がなければ、2015年初旬のGAを見込んでいます。詳細な流れとGAまでの計画はJavaOne 2014までに提示できる予定です。
高品質なポーティングを実施するために(明らかに)必要なものの一つに、開発およびQAのためのハードウェアがあります。そのため、Caviumとこのプロジェクトで協同することを発表できうれしく思っています。Caviumは長期間にわたってJavaエコシステムのサポーターであり、OracleとCaviumと共通する数多くのお客様が、様々なバージョンのJavaをMIPSやARMベースのCaviumのハードウェアで実行しています。Cavium製ThunderXハードウェアでのOracle JDK 8リリース動作確認ならびに最適化をするために、Caviumは開発機やエンジニアリングリソースを提供することに合意いただきました。これにより、ARMv8ならびにCaviumのハードウェアでのJDK 8の品質およびパフォーマンスの向上が見込まれます。
詳細情報は以下のリンクからどうぞ。
念のため、Oracle JDK 8を64bit ARMv8に対する移植版は、(汎用目的のサーバーなどの用途に対し)ロイヤリティフリーのBinary Code Licenseの下でリリースする予定ですが、オープンソース化する予定は現時点ではありません。
Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX
http://www.oracle.com/technetwork/java/javase/terms/license/index.html

2014年6月3日

[Java] Tell the CDI 2 Expert Group What You Think!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/tell_the_cdi_2_expert


CDIはJava EE 6で導入され、今やプラットフォームの主要なAPIになりました。CDI 1.1はCDI 1.2(GlassFish 4.0.1に含まれる予定)と同じようにJava EE 7において比較的小規模なリリースでしたが、新たにAntoine Sabot-Durandの下、CDI 2(Java EE 8に含まれることが見込まれています)に対し非常に高い期待をしています。Java EE8のサーベイを実施してプラットフォームの将来の方向性を固めようとしたように、CDI 2も現在同じようなことをしています。この目的のために、CDI2リーダーシップはオープンサーベイを通じて、いくつかの非常に具体的な項目に関するフィードバックを募っています。トピックには、Java SEのブートストラップ、非同期処理、モジュール性、CDIにおけるEJBスタイルの@Startupおよび@Asynchronous、構成やCDI Liteといったものです。もちろん、調査に含まれていない内容について、自由形式の入力フォームに記述することもできます。

是非CDI sepcificationのサイトを訪れ、サーベイに参加して下さい。CDI 2とJava EE 8の将来を一緒に形作っていただければと思います。
Contexts and Dependency Injection :: CDI 2.0 Survey
http://www.cdi-spec.org/news/2014/05/28/CDI-2_0-survey/

2014年6月2日

[Java] Deadlock Analysis in NetBeans 8

原文はこちら。
https://blogs.oracle.com/geertjan/entry/lock_contention_profiling_in_netbeans

ロック競合のプロファイリングは、マルチコア環境において非常に重要です。スレッドが別のスレッドが保持しているロックを取ろうとすると、ロック解除を待たざるを得ないため、ロック競合が発生します。ロックを使うことによってシーケンシャルな作業になるため、ロック競合により、並列に複数のコアを使用して得られる可能性のあるパフォーマンス向上を削がれます。最悪のシナリオでは、1つのスレッドしか動作しません。NetBeans 8には、NetBeans Profilerで新たにロックの競合、つまり、パフォーマンスのボトルネックに関する詳細情報を表示するようになりました。これを使うことで、問題のスレッドを識別しやすくなります。
例として、Java Tutorialにあるデッドロックのサンプルコードを使い、NetBeans IDEのツールでコードを識別・分析してみましょう。
Deadlock (The JavaTM Tutorials)
http://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html
このデッドロックの表現がいいですね。
AlphonseとGastonは友人同士で、礼儀正しい者たちです。礼儀の厳格なルールは、友人にお辞儀をするときは、相手がお辞儀を返すタイミングがあるまで、ずっと
お辞儀をし続けなければならない、というものです。残念ながら、このルールは2人が同時にお互いに屈するかもしれないという可能性を考慮していません。
誰が初めにお辞儀をしたか、または少なくともお辞儀の順序を識別するために、ファイルを右クリックし、[ファイルをプロファイル(Profile file)]を選択します。Profile Task Managerで、以下のように選択します。

[実行]をクリックすると、スレッドウィンドウが開き、2個のスレッドがブロックされている、つまり、同期メソッドに入ったり、ブロックしようとしている関連するスレッドがブロックされていることを赤い「モニター」の線が知らせてくれています。

では、どちらのスレッドがロックを保持しているのでしょう?どちらがどちらにブロックされているのでしょう?上記の画面ではわかりませんね。
NetBeans 8の新機能で、新しいロック競合ウィンドウを使い、デッドロックを分析し、どちらのスレッドがロックしているのかを究明することができるようになっています。

(訳注)
NetBeansの日本語UIでは「ロック内容」になっています。

以下はロックをシミュレートしたコードですが、ちょっとだけ手を入れています。それは、setNameメソッドをスレッドで使い、関連するNetBeansのツールで分析しやすくしています。また、匿名inner RunnablesをLambda式に変換しています。
package org.demo;
public class Deadlock {
    static class Friend {
        private final String name;
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public synchronized void bow(Friend bower) {
            System.out.format("%s: %s"
                    + " has bowed to me!%n",
                    this.name, bower.getName());
            bower.bowBack(this);
        }
        public synchronized void bowBack(Friend bower) {
            System.out.format("%s: %s"
                    + " has bowed back to me!%n",
                    this.name, bower.getName());
        }
    }
    public static void main(String[] args) {
        final Friend alphonse
                = new Friend("Alphonse");
        final Friend gaston
                = new Friend("Gaston");
        Thread t1 = new Thread(() -> {
            alphonse.bow(gaston);
        });
        t1.setName("Alphonse bows to Gaston");
        t1.start();
        Thread t2 = new Thread(() -> {
            gaston.bow(alphonse);
        });
        t2.setName("Gaston bows to Alphonse");
        t2.start();
    }
}
上記のコードでは、bowBack(お辞儀を返す)を起動しようとすると、両方のスレッドがブロックする可能性が非常に高いのです。各スレッドは他方のお辞儀が終了するのを待っているため、どちらのブロックも終了しません。

[注意]ご覧になっておわかりかと思いますが、コードでThreadを作成しているところであればどこでも、ThreadのsetNameメソッドを使って名前を付けておくべきでしょう。というのは、スレッドに名前を付けると、IDEのツールでより多くの意味を持つようになるからです。もし付けなかったとしたら、スレッドの順序をベースとした"thread-5"とか"thread-6"といった、無意味なスレッド名を使います。 (通常は、上記のような簡単なデモのシナリオ以外では、同じクラスでスレッドを開始しません。そのため、スレッドの開始順序を知らないので、Thread-5やThread-6が何を意味するのか全く見当がつかないことでしょう)。
もう少しコンパクトにすると、以下のような感じになります。
Thread t1 = new Thread(() -> {
    alphonse.bow(gaston);
},"Alphonse bows to Gaston");
t1.start();
Thread t2 = new Thread(() -> {
    gaston.bow(alphonse);
},"Gaston bows to Alphonse");
t2.start();