黑马程序员技术交流社区

标题: 多线程的问题 [打印本页]

作者: 张强1    时间: 2013-7-31 22:09
标题: 多线程的问题
本帖最后由 杨兴庭 于 2013-8-1 18:55 编辑




大家帮忙看一下,这个多线程运行的结果,【线程编号,5,main】,毕老师运行的视频结果只有线程编号,那么那个5,和main指的是什么啊,为什么我运行的结果会多出来这俩东西那。









作者: 手心里的温柔    时间: 2013-8-1 02:08
Thread类中currentThread()方法的定义
  1.     public static native Thread currentThread();

  2.     /**
  3.      * A hint to the scheduler that the current thread is willing to yield
  4.      * its current use of a processor. The scheduler is free to ignore this
  5.      * hint.
  6.      *
  7.      * <p> Yield is a heuristic attempt to improve relative progression
  8.      * between threads that would otherwise over-utilise a CPU. Its use
  9.      * should be combined with detailed profiling and benchmarking to
  10.      * ensure that it actually has the desired effect.
  11.      *
  12.      * <p> It is rarely appropriate to use this method. It may be useful
  13.      * for debugging or testing purposes, where it may help to reproduce
  14.      * bugs due to race conditions. It may also be useful when designing
  15.      * concurrency control constructs such as the ones in the
  16.      * {@link java.util.concurrent.locks} package.
复制代码
获取线程对象的引用调用的是本地的方法,我感觉或许是因为系统的不同得到的信息不太一样
5代表的是线程的优先级  后边那个main就不清楚了

希望能帮到你  共同学习哈
作者: の放下执著    时间: 2013-8-1 02:22
本帖最后由 の放下执著 于 2013-8-1 02:24 编辑

static Thread currentThread()     返回对当前正在执行的线程对象的引用。  注意这个方法是静态的,可以用类名直接调用。
String getName()                      返回该线程的名称。
5 是线程的优先级,默认是5;
MAX_PRIORITY  最高优先级   10
MIN_PRIORITY  最低优先级    1
NORM_PRIORITY 默认优先级  5
可以通过:setPriority(int newPriority)设置线程的优先级。
最后面的main貌似是固定的(个人理解,,这东西太细节了,记不了那么多)。

最后给出改了的代码:
public class ThreadDemo1 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ThreadName tn1 = new ThreadName();
                ThreadName tn2 = new ThreadName();
                tn1.start();
                tn2.start();
                for(int x =0;x<60;x++)
                        System.out.println(Thread.currentThread().getName()+"。。。。"+x);//增加getName()方法,只获取名称
        }
}

class ThreadName extends Thread
{
        public void run()
        {
                for(int i=0;i<60;i++)
                        System.out.println(Thread.currentThread().getName()+"........."+i);//增加getName()方法,只获取名称
        }
}最后希望可以帮到楼主,嘿嘿



作者: 手心里的温柔    时间: 2013-8-1 02:26
又看了一下视频  楼主确实是少了getName()方法
作者: 张强1    时间: 2013-8-1 08:55
手心里的温柔 发表于 2013-8-1 02:26
又看了一下视频  楼主确实是少了getName()方法

首先说一点Thread.currentThread()=this.getName(),这俩个方法否是获取线程名称用的。没区别,我的出现那种情况是同类型代码运行多次偶尔会出现,才会好奇,应该和这方法没直接关系。
作者: 张强1    时间: 2013-8-1 08:56
【线程编号,5,main】  知道了5是表示优先级了,那位朋友知道其中的main表示的是什么啊。
作者: 手心里的温柔    时间: 2013-8-1 12:29
张强1 发表于 2013-8-1 08:55
首先说一点Thread.currentThread()=this.getName(),这俩个方法否是获取线程名称用的。没区别,我的出 ...

这两个是不一样的,currentThread()返回的是线程对象的引用,getName()反回的是线程的名称
Thread.currentThread().getName()在某些情况下和this.getName()才是相同的,
楼主再仔细看一下视频




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2