Java多线程Thread类了解和使用

创建线程的两种方式

  1. extends Thread 类
public class WelComeApp {

    public static void main(String[] args) {
        WelcomeThread thread = new WelcomeThread();
        thread.start();
        System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName());
    }
    
    public static class WelcomeThread extends Thread {
        @Override
        public void run() {
            System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName());
        }
    }
}
  1. 实现 Runnable 接口
public class WelComeApp1 {

    public static void main(String[] args) {

        Thread thread = new Thread(() -> System.out.printf("2.Welcome, I'm %s.%n", Thread.currentThread().getName()));
        thread.start();
        System.out.printf("1.Welcome, I'm %s.%n", Thread.currentThread().getName());
    }
}

注意事项

  • 一个 Thread 实例调用过 start 方法后,就不能再次调用,否则会出现 java.lang.IllegalThreadStateException 异常信息

线程的生命周期状态

位于 Thread#State 枚举列表出 6 个状态

public enum State {
    NEW,
    RUNNABLE,
    BLOCKED,
    WAITING,
    TIMED_WAITING,
    TERMINATED;
}
  • NEW

    刚刚创建好的线程对象,在 Start 方法之前

  • RUNNABLE

    在它的内部有两个子状态、 ready,running 。线程一定是在被cpu调度到了,再一切准备完毕下才能开始工作。

    那么 READY 就是获取到CPU资源,准备就绪,可以执行。

    RUNNING 表示正在程序正在执行,对应到是 java 代码里的 run 方法。

  • BLOCKED

    阻塞的, 通常我们说这个形容词都是在文件系统才用的到,这里也可以这么的认为,当前线程被一个I/O操作给阻塞住了,当前所占的cpu资源被分配去做其他事情了!等阻塞完后,再申请CPU资源回到 RUNABLE 状态。

  • WAITING

    产生这些状态一搬在当前线程调用了 Object.wait() 、 Thread.join()

    调用 Object.notify()/Object.notifyAll() 回到 RUNABLE

  • TIMED_WAITING

​ WAINT 状态是有等待某个其他线程结束,而当前状态是带有事件的概念在里面,我可以等,你有时间限制。

  • TERMINATED

    这没啥好说的,当前线程结束。

多线程编程的好处与坏处

优势

  1. 大大的提高了系统的吞吐率
  2. 能充分的利用多核处理器资源
  3. 使用多线程比使用多进程更能节省资源

风险

  1. 线程安全的问题,同一个进程内的线程是共享进程资源,没有做好安全控制可能会导致数据混乱。
  2. 提高了编程难度,比如产生死锁,导致程序奔溃
  3. 可能会加重CPU负担,多个线程工作会导致上下文的切换,这也是一笔不小的开支。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值