就是整个程序段具体是怎样编译 我看这个有一点不懂 望高手帮我耐心解释清楚具体的流程
public class MyThread extends Thread {
private static int count=0;
public void run(){
int i;
for(i=0;i<100;i++){
count=count+1;
System.out.println("My name is"+getName()+"count="+count);
try{
sleep(10);
}catch(InterruptedException e){
}
}
}public MyThread(String name){
super(name);
}}和这段程序代码
public class mulThread {
public static void main(String argv[]){
MyThread trFirst,trSecond;
trFirst=new MyThread("First Thread");
trSecond=new MyThread("Second Thread");
trFirst.start();
trSecond.start();
}}
public class MyThread extends Thread {
private static int count=0;
public void run(){
int i;
for(i=0;i<100;i++){
count=count+1;
System.out.println("My name is"+getName()+"count="+count);
try{
sleep(10);
}catch(InterruptedException e){
}
}
}public MyThread(String name){
super(name);
}}和这段程序代码
public class mulThread {
public static void main(String argv[]){
MyThread trFirst,trSecond;
trFirst=new MyThread("First Thread");
trSecond=new MyThread("Second Thread");
trFirst.start();
trSecond.start();
}}
解决方案 »
- 都说Servlet和JSP、SSH过时了,那现在流行什么?
- javaEE主要应用于网站还是软件
- Hebernet 一个方法中的 删除、增加 先后执行问题
- struts2中的购物车每刷新一次物品的数量都+1怎么解决不+1呢?
- EJB经验汇集!你一句他一句我一句就是经验!进来了就看看别人怎么学EJB/JMS/JEE 的??
- JBOSS中如何设置JNDI
- 高手!救救一下新手!
- 高手赐教!!!!1000分跪求!!!配置方法!!
- java初学 发现线程难理解阿 实际开发中线程用的多吗???
- java实现批量下载
- 在线急等!不用button,怎样实现多个submit对应一个jsp!
- 找到工作了,发贴散分庆祝一下
trFirst=new MyThread("First Thread");
trSecond=new MyThread("Second Thread");
trFirst.start();
trSecond.start();
分别new出两个MyThread线程,启动。
基本就是这样 run方法就是具体线程的实现现在可以继承Thread类,也可以实现Runnable接口!去看一点多线程的基础 就知道了
错别字。。
基本就是这样 run方法就是线程具体的实现线程可以继承Thread类,也可以实现Runnable接口!去看一点多线程的基础 就知道了
/*定义一个类名字叫MyThread,该类继承自Thread类 */
public class MyThread extends Thread {
private static int count = 0; //定义一个int类型静态变量,名字叫count,值为0/*重写Thread类得run()方法,当线程启动的时候,执行这个run()方法 */
public void run() {
int i;
for (i = 0; i < 100; i++) { //循环100次
count = count + 1; //每次循环count就自动+1(count作为计数器用)[备注:你这个count还没初始化呢?]
System.out.println("My name is" + getName() + "count=" + count); //每次循环打印一句话
try {
sleep(10); //每次循环线程睡眠10毫秒
} catch (InterruptedException e) { }
}
}/*自定义类MyThread类得构造方法,方法体为调用Thread类的构造方法 */
public MyThread(String name) {
super(name);
}}/*定义个类名字叫nulThread,建议楼主以后写类名首字母要大写,谢谢*/
public class mulThread {
public static void main(String argv[]) { //main()方法,没什么好说的了
MyThread trFirst, trSecond; //定义两个变量,注意这是引用,类型为MyThread,名字分别叫trFirst, trSecond
trFirst = new MyThread("First Thread"); //在内存中实例化两个MyThread对象,分别给上面的两个引用名称引用
trSecond = new MyThread("Second Thread");
trFirst.start(); //启动线程,执行线程体中的run()方法
trSecond.start(); //启动线程,执行线程体中的run()方法 }}谢谢,希望对你有帮助
trFirst = new MyThread("First Thread");
trSecond = new MyThread("Second Thread");实例化变量 且给name赋值接着调用start启动线程 持行run里面的代码我认为你要问的应该是为什么count打印出来的数据会变动? 由于count = count + 1;没有加锁 所以他不同步,每个线程都可以同时访问
当trFirst持行到count = count + 1;这句 但是并未持行结束trSecond也来访问count = count + 1;他们获取的count都是上次的值 相加后 得到同一个值 所以后期打印会发现最后count不固定 但是程序都是固定持行了100次 两个线程共200次
count = count + 1; //每次循环count就自动+1(count作为计数器用)[备注:你这个count还没初始化呢?]实例化对象的时候就已经初始化了count 且是共享的 仅初始化一次
My name isSecond Threadcount=2
My name isFirst Threadcount=4
My name isSecond Threadcount=4
My name isFirst Threadcount=5
My name isSecond Threadcount=6
My name isSecond Threadcount=7
My name isFirst Threadcount=8
My name isSecond Threadcount=9
My name isFirst Threadcount=10
My name isFirst Threadcount=12
My name isSecond Threadcount=12
My name isFirst Threadcount=13
------------------------------------
这个是我运行的一种结果的前几个,发现有的输出重复了,这种情况符合6楼heardy的说法