<p>你应该打电话给警察线程.开始()方法。你知道吗</p>
<pre><code>import threading
class myThread(threading.Thread):
def __init__(self,threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
currentTreadname = threading.currentThread()
print "running in", currentTreadname
thread = myThread(1, "mythread", 1)
thread.start()
</code></pre>
<p>输出为:</p>
<pre><code>running in <myThread(mythread, started 140140930873088)>
</code></pre>
<blockquote>
<p>start()</p>
<p>Start the thread’s activity.</p>
<p>It must be called at most once per thread object. It arranges for the object’s run() method to be invoked in a separate thread of control.</p>
<p>run()</p>
<p>Method representing the thread’s activity.</p>
<p>You may override this method in a subclass. The standard run() method invokes the callable object passed to the object’s constructor as the target argument, if any, with sequential and keyword arguments taken from the args and kwargs arguments, respectively.</p>
</blockquote>
<p>正如文档所说,<strong>start()方法启动线程的活动,是的,这个活动是run()方法。</strong></p>
<p>更新</p>
<p><strong>标准run()方法调用作为目标参数传递给对象构造函数的可调用对象。</strong></p>
<p>第二个对象是您的myThread实例,您是对的。但可调用的对象不是你说的。看看这个穿线。穿线定义:</p>
<pre><code>class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
</code></pre>
<blockquote>
<p>target is the callable object to be invoked by the run() method. Defaults to None, meaning nothing is called.</p>
</blockquote>
<p>可调用对象是您传递给它的目标参数。关于这一点,您可以参考<a href="https://docs.python.org/2/library/threading.html" rel="nofollow noreferrer">https://docs.python.org/2/library/threading.html</a></p>
<p><strong>为什么要打印代码<code>running in <_MainThread(MainThread, started 139982993762048)></code>?</strong></p>
<p>因为您不调用<code>Thread.start</code>方法,所以它不会启动新线程。因此,如果您只调用<code>myThread.run</code>,它只是一个普通的对象方法调用。它在主线程中调用。所以它会打印这个。你知道吗</p>