Java 线程(Thread)
为什么需要使用线程:
我们知道,一般程序都是以一个由上至下的运行方式运行的,不完成上一步的时候,是无法进入下一步的执行的。可是我们有时候需要在一个程序同时去做两个不同的任务,各自之间互不干涉,那么根据程序的执行过程,该如何解决呢?
答案就是使用线程,所谓线程,就是一个程序中最小的执行单元,一个程序在运行时就是一个进程,一个进程可以包含多个线程,这样就允许了一个程序同时去做不同的任务。所以总结的说,我们需要使用线程来让程序在同一时间做不同的事情,并且互不干涉。
### 注:
- 程序是包含了所有执行文件、数据文件、图像文件以及各种文档的资源集合,存储在电脑磁盘里
- 进程是一个程序在运行时所需要的所有资源集合,包含了代码、数据、堆栈、变量等,就像一台电脑。
- 线程是进程的子集,每一个线程可以看作是进程中的一个执行单元,就像CPU。
线程的基本特点:
在不同的语言中,线程有不同的实现方式,但都有共同的基本特征:
- 没有属于自己的内存空间,所有使用的空间都是由进程统一安排分配
- 在线程中使用的数据会存放到属于自己的栈中,但栈中的数据我们是知道的,是不会保留下来的 :cry:
- 线程的上下文切换是比进程要快很多倍的,而且新建一个线锁需要的时间开销也是少于进程的;但有优点就一定会有缺点,线程的开销是很大的,每创建一个线程都至少要分配512KB甚至是1MB字节的内存,还有的线程及进程的区别可以去看有关操作系统的书
使用线程的方法:
- 继承Thread类
- 实现Runnable接口
虽然都可以实现线程的控制,但是我们在实际中却用到第二种方法比较多,原因就是我们有时候需要继承不止一个类,这时如果我们不去实现Runnable接口,我们该如何使这个类编程线程类呢?:happy:
实现线程类需要注意的地方:
我们想让线程去做的任务都写在run方法里
线程类创建后我们需要去启动线程,而不是调用run方法,不然就仍旧还是方法调用
启动线程的方法
实现Runnable接口:
class Ball implements Runnable{ public void run(){ System.out.println("hello thread"); //我们想使用多线程实现的内容 } } class UseBall { Ball ball = new Ball(); new Thread(ball).start(); }
继承Thrad类:
class Ball extends Thread{ public void run(){ System.out.println("hello thread"); //我们想使用多线程实现的内容 } } class UseBall { Ball ball = new Ball(); ball.start(); }
使用线程进行操作的时候注意添加异常操作
总结:
综上所述,线程的使用方法以及一些特点就在这里了。个人理解其使用的条件就是想让程序同时完成不同的任务时,使用多线程实现。
多线程是java重要的的特点之一,利用多线程我们可以完成很多特殊的功能,比如:弹球游戏、坦克大战和聊天室等等。