java多线程-基本的操作及状态分析

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(线程已完成执行)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值