黑马程序员技术交流社区
标题:
关于多线程的问题。。。。。
[打印本页]
作者:
黑马任雪刚
时间:
2012-5-20 09:40
标题:
关于多线程的问题。。。。。
//售票的小程序。
//并且是两个窗口同时售票。
class Ticket extends Thread
{
private static int ti=100;//为什么这儿加上static修饰符就不是“二百张票了”?????
Ticket()
{
super();
}
Ticket(String name)
{
super(name);
}
public void run()
{
while(true)
{
if(ti>0)
System.out.println(this.getName()+"run-----"+ti--);
}
}
}
public class Td
{
public static void main(String[] args)
{
Ticket t=new Ticket("one++++");
Ticket t1=new Ticket("two++++");
t.start();
t1.start();
}
}
作者:
李保成
时间:
2012-5-20 09:45
private static int ti=100;//为什么这儿加上static修饰符就不是“二百张票了”?????
看了半天才明白你要说的是啥意思,被static修饰的变量存放在静态共享区,等于是一个共享的数据。所以线程在操作它时,始终是在对同一个数据进行操作。
作者:
李哲
时间:
2012-5-20 09:48
就像毕老师说的,静态的成员变量存在于方法区。对象没建立之前就已经存在。
也许可以这么理解,int 变量ti只有一个,就在方法区。只有一个,注意这一点。
如果不是静态,那就每个实例对象都有一个int 变量ti,两个对象就有两个。
作者:
魏涞
时间:
2012-5-20 09:59
当一个类中定义了一个静态的成员变量后,在类加载的时候,这个静态成员变量就随着类的加载而加载到内存中的方法区中,并共享于该类的所有对象, 一个对象对该成员变量进行修改,其他对象在使用时,得到的是修改后的值。
作者:
秦晓阳
时间:
2012-5-20 10:30
整个技术分真难,都带抢的{:soso_e153:} 说说我的看法吧
在这个例子里,票是共享资源,必须保证多条线程访问的都是同一个资源,那么,如果不把票这个属性静态化,就会出现,每开一条线程重新new 100张票,显然不合理的。当票数量这个属性被静态,那么这个属性就会存贮在静态区,成为共享资源,就实现了每条线程调用的都是同一个资源。
作者:
麦田守望者0812
时间:
2012-5-20 10:37
private static int ti=100;//为什么这儿加上static修饰符就不是“二百张票了”?????
还要加强基础呀 关于静态变量,变量在内存的存储位置应该好好看一下 以static修饰的变量会在内存静态存储区域分配空间 成为共享资源 并且在定义时赋予初值,不能被修改
作者:
黑马任雪刚
时间:
2012-5-20 16:07
谢谢!!!
作者:
niceBoy
时间:
2012-5-20 22:23
static代码只在类首次加载时开辟一次空间,也就是说所有此类的对象共享static代码。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2