Java——线程案例

来源:互联网 发布:mac下提取dsdt命令 编辑:程序博客网 时间:2024/06/06 00:33
/*实现两个人同时show需要使用多线程创建线程的第一种方式:1、创建一个类继承Thread2、重写Thread类中的run方法        创建线程是为了执行任务        任务代码必须有存储位置,run方法就是任务代码的存储位置3、创建子类对象,其实就是在创建线程4、启动线程        主线程的任务代码在main函数中        子线程的任务代码在Thread类的run方法中run()方法只是一个普通的方法调用,不具备启动线程的功能start()方法会启动线程并执行run方法中的代码//下面这种方法也是创建了两个线程,但没有执行结果public static void main(String[] args){    Thread t1 = new Thread();    Thread t2 = new Thread();    t1.start();    t2.start();    以上代码执行没有结果,因为Thread类中的run方法没有实现任何功能    因为任务代码必须写在run方法中,而Thread类中的run方法没有实现任何功能    所以只有继承Thread类,重写run方法,即创建线程的第一种方式}*/class Person extends Thread{    private String name;    Person(String name){        this.name = name;    }    //之前    //public void show(){    //重写Thread类中的run方法    //run()中的代码就是线程对应的任务代码    //Thread.currentThread()得到一个线程对象    //getName()是Thread.currentThread()下的方法,作用是得到该线程对象的名字    public void run(){        for(int i=1;i<=10;i++){            //子线程的名字是Thread-编号  编号从0开始            System.out.println(Thread.currentThread().getName()+"...show..."+i);        }    }}class test{    public static void main(String[] args){ //主线程        Person ren1 = new Person("张三");//创建了一个线程        Person ren2 = new Person("李四");//创建了一个线程        //主线程执行到这里时,有两个线程,主线程和垃圾回收线程        //因为自己定义的线程并没有启动,只有启动了才开始争抢CPU        //之前        // ren1.show();        // ren2.show();        //启动线程        ren1.start();//执行到这里有三个线程        ren2.start();//执行到这里有四个线程        //下面这句话会先执行        //原因:上面两个自定义的线程启动了之后,并不是真正的启动        //      只是有了争抢CPU的资格,他们没有抢到主线程此时        //      所占用的CPU,主线程就会先执行下面这句话        //主线程的名字是main        System.out.println(Thread.currentThread().getName()+"hello");        //当所有线程全部结束,整个进程才会结束    }}
/*主线程先入栈mainren1之后就存在了Thread-0,会在栈中开辟内存ren2之后就存在Thread-1,也会在栈中开辟内存然后就开始抢内存当线程执行完自己的任务代码,线程就从栈中消失当所有线程都结束了,整个进程才结束一个线程发生异常,是该线程自己的事儿,不会影响其他线程的执行*/class Person extends Thread{    private String name;    Person(String name){        this.name = name;    }    public void run(){        for(int i=1;i<=10;i++){            System.out.println(Thread.currentThread().getName()+"...show..."+i);        }    }}class test{    public static void main(String[] args){        Person ren1 = new Person("张三");        Person ren2 = new Person("李四");        ren1.start();        ren2.start();        //每个线程是相互独立的,即使主线程运行下面这段代码发生异常new ArithmeticException()        //也不会影响上面两个线程的运行        System.out.println(5/0);    }}
原创粉丝点击