# -- coding:utf-8 -- import threading import time, random class Counter: def __init__(self): self.lock = threading.Lock() self.value = 0 def increment(self): self.lock.acquire() # critical section self.value = value = self.value + 1 self.lock.release() return value counter = Counter() class Worker(threading.Thread): def run(self): for i in range(10): # pretend we're doing something that takes 10�00 ms value = counter.increment() # increment global counter time.sleep(random.randint(10, 100) / 1000.0) print self.getName(), "-- task", i, "finished", value # # for i in range(10): Worker().start() # start a worker
结果:
Thread-8 -- task 0 finished 8 Thread-4 -- task 0 finished 4 Thread-7 -- task 0 finished 7 Thread-2 -- task 0 finished 2 Thread-9 -- task 0 finished 9 Thread-8 -- task 1 finished 11 Thread-10 -- task 0 finished 10 Thread-9 -- task 1 finished 15 Thread-7 -- task 1 finished 13 Thread-1 -- task 0 finished 1 Thread-6 -- task 0 finished 6 Thread-3 -- task 0 finished 3 Thread-5 -- task 0 finished 5 Thread-5 -- task 1 finished 23 Thread-9 -- task 2 finished 18 Thread-4 -- task 1 finished 12 Thread-2 -- task 1 finished 14 Thread-7 -- task 2 finished 19 Thread-6 -- task 1 finished 21 Thread-5 -- task 2 finished 24 Thread-8 -- task 2 finished 16 Thread-2 -- task 2 finished 27 Thread-1 -- task 1 finished 20 Thread-4 -- task 2 finished 26 Thread-10 -- task 1 finished 17 Thread-1 -- task 2 finished 33 Thread-3 -- task 1 finished 22 Thread-9 -- task 3 finished 25 Thread-7 -- task 3 finished 28 Thread-6 -- task 2 finished 29 Thread-8 -- task 3 finished 31 Thread-1 -- task 3 finished 36 Thread-5 -- task 3 finished 30 Thread-2 -- task 3 finished 32 Thread-6 -- task 3 finished 40 Thread-4 -- task 3 finished 34 Thread-1 -- task 4 finished 42 Thread-9 -- task 4 finished 38 Thread-10 -- task 2 finished 35 Thread-7 -- task 4 finished 39 Thread-3 -- task 2 finished 37 Thread-5 -- task 4 finished 43 Thread-1 -- task 5 finished 47 Thread-3 -- task 3 finished 51 Thread-9 -- task 5 finished 48 Thread-8 -- task 4 finished 41 Thread-5 -- task 5 finished 52 Thread-6 -- task 4 finished 45 Thread-2 -- task 4 finished 44 Thread-4 -- task 4 finished 46 Thread-3 -- task 4 finished 54 Thread-7 -- task 5 finished 50 Thread-10 -- task 3 finished 49 Thread-8 -- task 5 finished 56 Thread-7 -- task 6 finished 62 Thread-9 -- task 6 finished 55 Thread-5 -- task 6 finished 57 Thread-3 -- task 5 finished 61 Thread-1 -- task 6 finished 53 Thread-9 -- task 7 finished 66 Thread-7 -- task 7 finished 65 Thread-4 -- task 5 finished 60 Thread-8 -- task 6 finished 64 Thread-2 -- task 5 finished 59 Thread-6 -- task 5 finished 58 Thread-10 -- task 4 finished 63 Thread-1 -- task 7 finished 69 Thread-2 -- task 6 finished 74 Thread-5 -- task 7 finished 67 Thread-3 -- task 6 finished 68 Thread-6 -- task 6 finished 75 Thread-5 -- task 8 finished 79 Thread-10 -- task 5 finished 76 Thread-1 -- task 8 finished 77 Thread-7 -- task 8 finished 71 Thread-4 -- task 6 finished 72 Thread-9 -- task 8 finished 70 Thread-1 -- task 9 finished 84 Thread-8 -- task 7 finished 73 Thread-9 -- task 9 finished 87 Thread-6 -- task 7 finished 81 Thread-3 -- task 7 finished 80 Thread-2 -- task 7 finished 78 Thread-3 -- task 8 finished 90 Thread-10 -- task 6 finished 83 Thread-5 -- task 9 finished 82 Thread-4 -- task 7 finished 86 Thread-7 -- task 9 finished 85 Thread-8 -- task 8 finished 88 Thread-6 -- task 8 finished 89 Thread-2 -- task 8 finished 91 Thread-3 -- task 9 finished 92 Thread-6 -- task 9 finished 96 Thread-10 -- task 7 finished 93 Thread-8 -- task 9 finished 95 Thread-2 -- task 9 finished 97 Thread-4 -- task 8 finished 94 Thread-10 -- task 8 finished 98 Thread-10 -- task 9 finished 100 Thread-4 -- task 9 finished 99