package
com.zj.lock;
import
java.util.concurrent.TimeUnit;
public
class
Resource1 {
public
void
f() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in f()"
);
synchronized
(
this
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in f()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
void
g() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in g()"
);
synchronized
(
this
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in g()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
void
h() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in h()"
);
synchronized
(
this
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in h()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
static
void
main(String[] args) {
final
Resource1 rs =
new
Resource1();
new
Thread() {
public
void
run() {
rs.f();
}
}.start();
new
Thread() {
public
void
run() {
rs.g();
}
}.start();
rs.h();
}
}
|
package
com.zj.lock;
import
java.util.concurrent.TimeUnit;
public
class
Resource2 {
private
Object
syncObject1
=
new
Object();
private
Object
syncObject2
=
new
Object();
public
void
f() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in f()"
);
synchronized
(
this
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in f()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
void
g() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in g()"
);
synchronized
(
syncObject1
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in g()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
void
h() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in h()"
);
synchronized
(
syncObject2
) {
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in h()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
public
static
void
main(String[] args) {
final
Resource2 rs =
new
Resource2();
new
Thread() {
public
void
run() {
rs.f();
}
}.start();
new
Thread() {
public
void
run() {
rs.g();
}
}.start();
rs.h();
}
}
|
package
com.zj.lock;
import
java.util.concurrent.TimeUnit;
import
java.util.concurrent.locks.Lock;
import
java.util.concurrent.locks.ReentrantLock;
public
class
Resource3 {
private
Lock
lock
=
new
ReentrantLock();
public
void
f() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in f()"
);
lock
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in f()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock
.unlock();
}
}
public
void
g() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in g()"
);
lock
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in g()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock
.unlock();
}
}
public
void
h() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in h()"
);
lock
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in h()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock
.unlock();
}
}
public
static
void
main(String[] args) {
final
Resource3 rs =
new
Resource3();
new
Thread() {
public
void
run() {
rs.f();
}
}.start();
new
Thread() {
public
void
run() {
rs.g();
}
}.start();
rs.h();
}
}
|
package
com.zj.lock;
import
java.util.concurrent.TimeUnit;
import
java.util.concurrent.locks.Lock;
import
java.util.concurrent.locks.ReentrantLock;
public
class
Resource4 {
private
Lock
lock1
=
new
ReentrantLock();
private
Lock
lock2
=
new
ReentrantLock();
private
Lock
lock3
=
new
ReentrantLock();
public
void
f() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in f()"
);
lock1
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in f()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock1
.unlock();
}
}
public
void
g() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in g()"
);
lock2
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in g()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock2
.unlock();
}
}
public
void
h() {
// other operations should not be locked...
System.
out
.println(Thread.currentThread().getName()
+
":not synchronized in h()"
);
lock3
.lock();
try
{
for
(
int
i = 0; i < 5; i++) {
System.
out
.println(Thread.currentThread().getName()
+
":synchronized in h()"
);
try
{
TimeUnit.
SECONDS
.sleep(3);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
finally
{
lock3
.unlock();
}
}
public
static
void
main(String[] args) {
final
Resource4 rs =
new
Resource4();
new
Thread() {
public
void
run() {
rs.f();
}
}.start();
new
Thread() {
public
void
run() {
rs.g();
}
}.start();
rs.h();
}
}
|