class Counter
{
public method increment ()
{
System.Concurrent.Monitor.acquire(self)
@count.increment()
System.Concurrent.Monitor.release(self)
}
public method get_count ()
{
@count
}
method initialize ()
{
field @count(0)
}
}
method run (counter)
{
counter.increment()
}
method main ()
{
counter = Counter.new()
run = get_method("run")
threads = Array.new()
for (i; 0..4) {
threads.add(System.Concurrent.Thread.new(run))
}
for (i; 0..4) {
threads[i].start(self, counter)
}
for (i; 0..4) {
threads[i].join()
}
print("count: " + counter.get_count())
}
main()