请教一个有关Python线程的问题
from threading import Thread
class MyThread(Thread):
myname = ""
count = 0
nlist = []
def __init__(self, sname):
Thread.__init__(self)
self.myname = sname
def run(self):
self.count += 1
self.nlist.append(self.name)
print(self.getName(), self.myname, self.count, self.nlist)
if __name__ == "__main__":
th = MyThread("First")
th.start()
th = MyThread("Second")
th.start()
import java.util.ArrayList;
import java.util.List;
public class TestThread
{
public static void main(String[] args)
{
MyThread t = new MyThread("First");
t.start();
t = new MyThread("Second");
t.start();
}
}
class MyThread extends Thread
{
private String name = "";
private int count = 0;
private List<Object> mylist = new ArrayList<Object>();
public MyThread()
{
}
public MyThread(String name)
{
this.name = name;
}
@Override
public void run()
{
count++;
mylist.add(this.name);
System.out.printf("%s__%d__%s\n", this.getName(), this.count, this.mylist.toString());
}
}
这时候,self.count被赋值了,因此对象增加了一个count的成员变量
如果你希望存储的是类的静态变量,应该用
MyThread.count+=1
就对了
如果你没对一个和静态变量同名的变量进行过赋值,那么通过self.xxx访问的就是该类的静态变量。
因此你的第二个问题,为什么nlist会共享,因为nlist没被赋值,只是在原有对象做了操作
如果改成
self.nlist = [self.name]
它的效果就和count一样了。
为了避免误解增加可读性,建议代码写成这样
class MyThread(Thread):
myname = ""
count = 0
nlist = []
def __init__(self, sname):
Thread.__init__(self)
self.myname = sname
def run(self):
MyThread.count += 1
MyThread.nlist.append(self.name)
print(self.getName(), self.myname, MyThread.count, MyThread.nlist)