0% found this document useful (0 votes)
12 views2 pages

# 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)
12 views2 pages

# 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

# 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