package Ġj du an Ċ Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġlock Ġ= ĠObject () ĊĊĠĠĠ Ġ// Ġthere 's Ġno Ġdead lock , Ġwhich Ġshows Ġlocks Ġin ĠJava Ġare Ġre - entrant ĊĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" I 'm Ġin Ġthe Ġsynchronized Ġblock ") ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" I 've Ġacquired Ġthe Ġlock Ġagain ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" done ") ĊĊĠĠĠ Ġval Ġgit Repo Ġ= ĠGit Repo () ĊĠĠĠ Ġval Ġjob 1 Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġgit Repo . read () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġjob 2 Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġgit Repo . read () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠThread . sleep ( 1 0 _ 0 0 0 ) ĊĠĠĠ Ġprintln (" Main Ġthread Ġis Ġdone ") Ċ } Ċ Ċ class ĠGit Repo Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠObject () ĊĠĠĠ Ġfun Ġread () Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Lock Ġacquired ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" thread : Ġ${ Thread . currentThread (). id }, Ġname : Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 3 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Lock Ġreleased ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ