多线程:
进程: 就是一个应用程序, 启动一个应用程序, 电脑一定会创建对应的进程, 进程与进程之间的内存空间独立的
线程: 进程中的最小单位, 一个进程包含多个线程, 同一个进程内部的包含的线程,内存空间是共享, 共享的是进程空间, 线程与线程可以很容易进行通信.
多线程: 优点: 提高效率, 程序执行次序不固定, 对程序员来说难点很多 PHP sun
实现多线程的方式:
- 继承java.lang.Thread 类, 重写run()方法, run()就是你让线程做什么事情.
启动线程: 创建线程对象
线程对象.start()
复习:
- 线程与进程的区别:
同一个进程中多个线程可以共享数据空间,但是进程之间是不能共享
一个进程可以包含一个或者多个线程
关闭进程的时候, 这个进程的包含所有的线程都关闭, 关闭一个线程, 不能关闭进程
进程就是一个应用程序,线程是应用程序中一段代码(指令)
Java是支持多线程, 多线程的优点: 提高效率. 缺点: 指令执行的次序可变, 增加编程的难度
使用场景: 对于大数据,大访问量的, 耗时很长的考虑使用多线程,来优化
Java中实现多线程的方式:
- 继承java.lang.Thread类, 重写run()方法, run()方法中就是你需要让线程执行的指令
- 实现Runnable接口, 实现run()方法
启动线程: 可以竞争CPU资源, 让CPU选择执行线程
线程对象.start()方法, à 启动线程,并不是说该线程就马上执行run(), 只是作为CPU的调度的候选, 如果线程竞争到CPU资源,可以执行.
一个线程一旦启动,就不能再调用start(), 如果调用start(),抛出: IllegalThreadStateException
Thread源码:
实现Runnable接口,和继承Thread类的区别:
- 继承Thread类, 这个类就不能再继承其他类, java是单继承,
实现Runnable接口, 所以还可以去继承 - 继承Thread类,启动线程, 类的对象.start() 启动代码简单
实现Runnable接口., 借助于Thread, 调用Thread类的start()启动, 启动代码要复杂一些 - 继承Thread类,属性数据不能共享的,
实现Runnable接口, 属性数据可以共享
推荐使用实现Runnable接口
线程的生命周期,(状态)