1--多个线程调用同一个对象会不会引起问题?比如多个线程调用同一个数组、队列,会不会出现问题?
答:CPU控制各个线程的运行,当你同时产生多个线程并访问同一对象时,你将无法确定何时,哪个线程修改你的对象,如更新数组,队列。这是多线程编程中解决对共享资源的访问,通常可通过关键字 synchronized 锁定被访问对象或程序块,使得同一时间只存在一个线程对指定公共资源的访问。
2--在线程的run函数里面XXX xxx = new XXX();来new一个对象,如果用一个循环来产生多线程,那么相当于会产生多个同名xxx对象,
答:会产生多个同名对象吗?想想当你 MyClass objA=new MyClass();执行上十遍,你会产生十个MyClass类的对象,但最终objA只会引用最后一次产生的对象。而其它九个对象同样存在,不过不再有任何方式引用它,自会由虚似机来回收它。(当然Java的特色了。),所以同一线程中你不会因此产生冲突。
而多个线程中产生MyClass()类的对象时,则是不同的类中保存有同名的对象,这也没什么问题的。要知道线程也是线程类的对象,你参照下边示例去想想:
class a{} public class b{
a a1;
public b(){
a1=new a();
}
}
上边的代码中,当你new出多个b类型的对象时,你还会担心存在多个同名的a1对象吗?
Java是一门好语言,刚学不久吧,好好努力吧。会有收获的。
答:CPU控制各个线程的运行,当你同时产生多个线程并访问同一对象时,你将无法确定何时,哪个线程修改你的对象,如更新数组,队列。这是多线程编程中解决对共享资源的访问,通常可通过关键字 synchronized 锁定被访问对象或程序块,使得同一时间只存在一个线程对指定公共资源的访问。
2--在线程的run函数里面XXX xxx = new XXX();来new一个对象,如果用一个循环来产生多线程,那么相当于会产生多个同名xxx对象,
答:会产生多个同名对象吗?想想当你 MyClass objA=new MyClass();执行上十遍,你会产生十个MyClass类的对象,但最终objA只会引用最后一次产生的对象。而其它九个对象同样存在,不过不再有任何方式引用它,自会由虚似机来回收它。(当然Java的特色了。),所以同一线程中你不会因此产生冲突。
而多个线程中产生MyClass()类的对象时,则是不同的类中保存有同名的对象,这也没什么问题的。要知道线程也是线程类的对象,你参照下边示例去想想:
class a{} public class b{
a a1;
public b(){
a1=new a();
}
}
上边的代码中,当你new出多个b类型的对象时,你还会担心存在多个同名的a1对象吗?
Java是一门好语言,刚学不久吧,好好努力吧。会有收获的。
public class SimpleThread extends Thread {
private int countDown = 5;
private static int threadCount = 0;
private int threadNumber = ++threadCount;
public SimpleThread() {
System.out.println("Making " + threadNumber);
}
public void run() {
while(true) {
System.out.println("Thread " +
threadNumber + "(" + countDown + ")");
if(--countDown == 0) return;
}
}
public static void main(String[] args) {
for(int i = 0; i < 5; i++)
SimpleThread st = new SimpleThread();
st.start();
System.out.println("All Threads Started");
}
}