zoukankan      html  css  js  c++  java
  • java多线程

    java中,线程有五种状态:创建,就绪,运行,阻塞,死亡

    创建:生成线程对象,但并没有调用该对象的start方法,则线程处于创建状态

    就绪:当调用了线程的start方法后,该线程就进入了就绪状态,但此时线程调度程序还没把该线程设置为当前线程,此时就处于就绪状态,在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

    运行:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始执行run函数中代码。

    阻塞:线程正在运行的时候,被暂停,通常是为了等待某个时间的发送(比如某资源就绪)之后,再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。

    死亡:如果一个线程的run方法执行结束或者调用stop方法之后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。

    实现并启动线程的两种方法

    1,写一个类继承Thread类,重写run方法,用start启动线程。

    2,写一个类实现Runnable接口,实现run方法,使用new Thread(Runnable target).start()方法来启动。

    注意,非必须情况,不要使用run方法启动,否则,会一直处于线程中,导致其他代码停止执行,除非调用stop或run方法执行结束线程,才会继续执行其他逻辑。

    调用start方法之后,线程会被放到等待队列,等待cpu调度,并不一定马上执行,只是处于就绪状态。

    1,start()方法来启动线程,真正实现了多线程运行。这时,无需等待run方法体代码执行完毕,可以直接继续执行下面的代码。通过Thread类的start()方法来启动一个线程,此时线程处于就绪状态,并没有运行,然后通过此Thread类调用方法run()来完成其运行操作。方法run()为线程体,它包好了要执行的这个线程的内容。run方法运行结束,此线程终止。

    2,run()方法作为普通方法的方式被调用,程序还是要顺序执行,要等到run方法体执行完毕之后,才能继续执行下面的代码。则会出现程序中只有主线程这一个线程,程序执行路径还是只有一条,这样就没有达到写线程的目的。

    class hello extends Thread {
     
        public hello() {
     
        }
     
        public hello(String name) {
            this.name = name;
        }
     
        public void run() {
            for (int i = 0; i < 5; i++) {
                System.out.println(name + "运行     " + i);
            }
        }
     
        public static void main(String[] args) {
            hello h1=new hello("A");
            hello h2=new hello("B");
            h1.run();
            h2.run();
        }
     
        private String name;

    运行结果

    A运行     0

    A运行     1

    A运行     2

    A运行     3

    A运行     4

    B运行     0

    B运行     1

    B运行     2

    B运行     3

    B运行     4

    public static void main(String[] args) {
            hello h1=new hello("A");
            hello h2=new hello("B");
            h1.start();
            h2.start();
        }

    运行结果

    A运行     0

    B运行     0

    B运行     1

    B运行     2

    B运行     3

    B运行     4

    A运行     1

    A运行     2

    A运行     3

    A运行     4

    感谢:http://blog.csdn.net/xuxurui007/article/details/7685076

  • 相关阅读:
    vue less使用/(除号/斜杠),浏览器不识别问题
    antDesignOfVue 表格复选框添加了默认选中状态,点击清空后数据清空,复选框的选中状态不变的问题。
    vue 可多选的日期插件
    antDesignOfVue 走马灯组件不自动定位到第一页
    antDesignOfVue 表格固定列之后出现空白列
    vue 动态添加表格列
    antDesignOfVue 符合条件的表格复选框禁止选中
    更换文件名大小写之后,git远程文件还存在,删除远程仓库的文件/文件夹
    git文件名大小写不敏感,更改文件大小写后无反应。
    记:mysql查询列含中文
  • 原文地址:https://www.cnblogs.com/javadongx/p/java_thread_runnable.html
Copyright © 2011-2022 走看看