• 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负担,多个线程工作会导致上下文的切换,这也是一笔不小的开支。

    参考

    • 《Java多线程编程实战指南》第1章

    __EOF__

  • 本文作者: Savey
  • 本文链接: https://www.cnblogs.com/m78-seven/p/15942542.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    8.2 JWT(代替Session)
    解读以下产生m个k位数的验证码的代码
    java毕业设计农田节水灌溉监测系统源码+lw文档+mybatis+系统+mysql数据库+调试
    Python字符串格式化
    中国人民大学与加拿大女王大学金融硕士——另辟蹊径往往能带来柳暗花明
    Mysql.索引存储结构演进
    【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day8
    Pod的异常状态
    Roson的Qt之旅#104 QML Image控件
    javascript大作业《web课程设计》用html做一个期末作业网站,梅西足球体育网页,css
  • 原文地址:https://www.cnblogs.com/m78-seven/p/15942542.html