0% found this document useful (0 votes)
0 views

# SyncObjTest.java

The document contains a Java program that demonstrates a synchronized counter using multiple threads. It includes a Producer that increments a counter and a Consumer that decrements it, both utilizing a locking mechanism to ensure thread safety. The program measures and prints the time taken for the operations and the final counter value after execution.

Uploaded by

hoangtu112201
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
0 views

# SyncObjTest.java

The document contains a Java program that demonstrates a synchronized counter using multiple threads. It includes a Producer that increments a counter and a Consumer that decrements it, both utilizing a locking mechanism to ensure thread safety. The program measures and prints the time taken for the operations and the final counter value after execution.

Uploaded by

hoangtu112201
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

# SyncObjTest.

java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SyncObjTest {

public static void main(String[] args) {


CounterLock c_lock = new CounterLock();
int inc_num = 10001234;
int dec_num = 10000000;

long start = System.currentTimeMillis();


Thread p = new Thread (new Producer(c_lock, inc_num));
p.start();

Thread c = new Thread (new Consumer(c_lock, dec_num));


c.start();
try {
p.join();
} catch (InterruptedException e) {}

try {
c.join();
} catch (InterruptedException e) {}
long finish = System.currentTimeMillis();
System.out.println(inc_num+" inc() calls, "+dec_num+" dec() calls = " +
c_lock.getCount());
System.out.println("With-SyncObj time: "+(finish-start)+"ms");
}
}

class Producer implements Runnable{

private CounterLock myCounter;


int num;

public Producer(CounterLock x, int Num) {


this.num=Num;
this.myCounter = x;
}

@Override
public void run() {
for (int i = 0; i < num; i++) {
myCounter.inc();
}
}
}

class Consumer implements Runnable{

private CounterLock myCounter;


int num;

public Consumer(CounterLock x, int Num) {


this.num=Num;
this.myCounter = x;
}
@Override
public void run() {
for (int i = 0; i < num; i++) {
myCounter.dec();
}
}
}

class CounterLock {

private long count = 0;

public void inc() {


synchronized (this) {
this.count++;
}
}

public void dec() {


synchronized (this) {
this.count--;
}
}

public synchronized long getCount() {


synchronized (this) {
return this.count;
}
}
}
Beta
0 / 0
used queries
1

You might also like