第一部分:
首先,说说线程和进程的区别吧。
花开两支,各表一处!
进程,是一个动态的概念,每个进程都有的代码和数据空间,切换进程会有较大的开销。
而线程呢,又叫轻量级进程。同一类的线程共享代码和数据空间,线程的切换较小。
一个应用程序就是一个进程,在操作系统中,可以同时运行多个进程(应用程序);而线程就是同一个应用程序中的多个顺序流,可以同时执行。
一个进程可以包含多个线程,不含线程的进程可以看作单线程。
最后,CPU会为进程分配内存,不会为线程分配内存。因为线程都是在进程中的,线程组共享资源。
java程序中,main方法是一个线程,一般称为主线程。底层中,GC也是一个线程。
第二部分:线程创建
1、继承java.lang.Thread方法 + 重写run()方法。
2、实现 runnable接口 + 重写run()方法(实际上静态代理模式),代理角色是Thread类。
3、实现callable接口 + 重写run()方法。这种方法创建线程,可以有返回值和能够声明异常。比较麻烦一点。
调用方法:前两种都是调用的对象的start()方法。第三种是调用服务的方式启动线程。
第三部分:线程状态
状态看下图即可,一目了然。
阻塞的方法:1、join()合并线程,等待合并的线程执行完。
2、yield()暂停自己,执行其他线程
3、sleep(),当前线程睡多长时间
4、等待IO资源
......
如有不对的地方,请批评指正!
一直相信,再牛逼的梦想,也挡不住傻逼似的坚持。
我只是一个平凡普通的程序员,码自己的代码 ,过平凡的生活。