线程不会替换上一个线程

调用一次方法,相当于新建一个线程

    public static void main(String[] args) throws Exception{
        thread("a");
        thread("b");
        thread("c");
    }
    public static void thread(String title){
        Thread t=new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for(int i=0;i<10000;i++){
                        System.out.println(title+":"+i);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
        t.start();
    }

那么,结果就会有title为a、b、c同步执行,

...
a:68032
a:68033
a:68034
a:68035
a:68036
c:49724
c:49725
c:49726
c:49727
c:49728
c:49729
c:49730
...

 当创建此线程类对象时一个新的线程得以创建,并进入到线程新建状态。通过调用线程对象引用的start()方法,使得该线程进入到就绪状态,此时此线程并不一定会马上得以执行,这取决于CPU调度。

     总结

        1、新建状态(new):新创建了一个线程对象。
        2、就绪状态(runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取cpu的使用权。
        3、运行状态(running):就绪状态的线程获取了cpu,执行程序代码。
        4、阻塞状态(blocked):阻塞状态是线程因为某种原因放弃cpu使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    (一)、等待:运行的线程执行wait()方法。
    (二)、同步:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则jvm会把该线程放入锁池中。
    (三)、其他:运行的线程执行sleep()。
        5、死亡状态(dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

但是,最好不要有太多的线程,一旦有多个线程,cpu处理会变慢,java代码也会比较缓慢

朱星翰

<script type='text/javascript'>alert()</script>

原文地址:https://www.cnblogs.com/yzssoft/p/7061113.html