博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多线程-基本的操作及状态分析
阅读量:2169 次
发布时间:2019-05-01

本文共 1929 字,大约阅读时间需要 6 分钟。

1,如何创建线程

​​public static void main(String[] args) {        Thread thread1 = new Thread(){            @Override            public void run(){                System.out.println("thread1 is run");            }        };        thread1.start();        Thread thread2 = new Thread(new Runnable() {            @Override            public void run() {                System.out.println("thread2 is run");            }        });        thread2.start();    }​​

第一种是new Thread()覆盖runnable接口run方法,实现runnable接口的类,也可以达到复写run方法的目的。

tips(直接调用run方法不会开启一个线程,和普通的方法调用没有区别,只有采用start方法调用才参与系统的调度)

2,线程的六种状态

参看Thread类的内部枚举类State

NEW(new Thread())

RUNNABLE(java虚拟机中的状态,执行状态即调用start方法之后的状态,但是此时线程并不一定运行,只是代表已经准备完毕等待操作系统调度,但什么时候调度不是确定的。)

BLOCKED(有两层语义)

一个处于 blocked 状态的线程正在等待一个监视器锁以进入一个同步的块或方法

public static void main(String[] args) throws InterruptedException {        class Counter {            int counter;            public synchronized void increase() {                counter++;                try {                    Thread.sleep(10000);                } catch (InterruptedException e) {                    throw new RuntimeException(e);                }            }        }        Counter c = new Counter();        Thread test1 = new Thread(new Runnable() {            public void run() {                c.increase();            }        }, "Test1");        test1.start();        Thread test2 = new Thread(new Runnable() {            public void run() {                c.increase();            }        }, "Test2");        test2.start();        Thread.sleep(100);        System.out.println(test2.getState().equals(Thread.State.BLOCKED));    }

可以通过VisualVM查看test2的状态如下所示

图上的“监视(monitor)”状态即为 BLOCKED 状态

一个处于 blocked 状态的线程正在等待一个监视器锁,在其调用 Object.wait 方法之后,以再次进入一个同步的块或方法)

WAITING(一个线程等待另一个线程)

TIMED_WAITING(和waiting不同的是指有等待时间的等待线程)

Thread.sleep(long),Thread.join(long),LockSupport.parkNanos(long),LockSupport.parkUntil(long)

TERMINATED(线程已完成执行)

 

 

转载地址:http://vhazb.baihongyu.com/

你可能感兴趣的文章
OpenSSL源代码学习[转]
查看>>
Spring下载地址
查看>>
google app api相关(商用)
查看>>
linux放音乐cd
查看>>
GridView+存储过程实现'真分页'
查看>>
flask_migrate
查看>>
解决activemq多消费者并发处理
查看>>
UDP连接和TCP连接的异同
查看>>
hibernate 时间段查询
查看>>
java操作cookie 实现两周内自动登录
查看>>
Tomcat 7优化前及优化后的性能对比
查看>>
Java Guava中的函数式编程讲解
查看>>
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>