A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hm626535 初级黑马   /  2013-4-27 18:02  /  1374 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Text
{
private static int j;
public static void main(String args[]){

        for(int i=0;i<2;i++){
               
                new Thread(new Thread(){
                        public void run() {
                                for(int x=0;x<100;x++){
                                        j++;
                                        System.out.println(Thread.currentThread().getName()+"   j:"+j);
                                }
                        }
                }).start();
                new Thread(new Thread(){
                        public void run() {
                                for(int x=0;x<100;x++){
                                        j--;
                                        System.out.println(Thread.currentThread().getName()+"   j:"+j);
                                }
                        }
                }).start();
               
        }
}
}
用匿名内部类的话,多运行几次线程ID变成 1,3,5,7了 。  0,2,4,6, 线程哪去了?
用下面的方法就不会出现问题,怎么回事。
public class Text2
{
        private static int j;
        public static void main(String args[]){
                Text2 t2 = new Text2();
                Add add = t2.new Add();
                Min min = t2.new Min();
                for(int i=0;i<2;i++){
                        Thread t = new Thread(add);
                        Thread t1 = new Thread(min);
                        t.start();
                        t1.start();
                }
        }
        class Add implements Runnable{
       
                public void run() {
                        for(int x=0;x<100;x++){
                                j++;
                                System.out.println(Thread.currentThread().getName()+"   j:"+j);
                                }
                        }
                }

        class Min implements Runnable{
       
                public void run() {
                        for(int x=0;x<100;x++){
                                j--;
                                System.out.println(Thread.currentThread().getName()+"   j:"+j);
                                }
                }
                       
       
        }
}


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
new Thread(new Thread(){
                        public void run() {
                                for(int x=0;x<100;x++){
                                        j++;
                                        System.out.println(Thread.currentThread().getName()+"   j:"+j);
                                }
                        }
                }).start();
这种写法?我还是第一次见。应该是Runnable吧;你又八个线程,但是真正运行代码的就只有四个。。。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
额。。。 知道了  new Thread (new Runnable){  就对了。。。new Thread占用了。。。
回复 使用道具 举报
new Thread(new Thread(){});
这种写法会线程占用的,只能运行一个。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马