Here is another example of threads.
Get the code
here.
| /** |
| * An enum with a single value is probably the ultimate singleton. |
| * However, it can get real ugly real soon as far as testability is concerned. |
| * |
| * @author megha birmiwal |
| */
|
| public enum StatisticsCollector {
|
| // can override methods in enums like this
|
| // INFLATED_STATS
|
| // public int getTimesCalled() {
|
| // return count * 10;
|
| // }
|
| // },
|
| STATS;
|
|
|
| private static int count = 0;
|
| private static double timeSum = 0;
|
|
|
| synchronized public void reportStat(double time) {
|
| count++;
|
| timeSum += time;
|
| }
|
|
|
| public int getTimesCalled() {
|
| return count;
|
| }
|
|
|
| public double getAverage() {
|
| return timeSum / getTimesCalled();
|
| }
|
| }
|
| /** |
| * Reports a given time to the {@link StatisticsCollector}. |
| * |
| * @author megha birmiwal |
| */
|
| public class TimeReporter implements Runnable {
|
|
|
| private final int timeToReport;
|
| private final int count;
|
|
|
| public TimeReporter(int timeToReport, int count) {
|
| this.timeToReport = timeToReport;
|
| this.count = count;
|
| }
|
|
|
| @Override
|
| public void run() {
|
| for (int i = 0; i < count; i++) {
|
| StatisticsCollector.STATS.reportStat(timeToReport);
|
| }
|
| }
|
}
| public class Main {
|
|
|
| public static void main(String args[]) throws InterruptedException {
|
|
|
| Thread threadX1 = new Thread(new TimeReporter(100, 10000));
|
| threadX1.start();
|
| Thread threadX2 = new Thread(new TimeReporter(100, 10000));
|
| threadX2.start();
|
|
|
| Thread threadY = new Thread(new TimeReporter(200, 10000));
|
| threadY.start();
|
|
|
| threadX1.join();
|
| threadX2.join();
|
| threadY.join();
|
|
|
| int timesCalled = StatisticsCollector.STATS.getTimesCalled();
|
| double average = StatisticsCollector.STATS.getAverage();
|
|
|
| System.out.println("Total Calls: " + (timesCalled));
|
| System.out.println("Average Time: " + (average));
|
| }
|
| } |
|
No comments:
Post a Comment