多线程的多种方法

程序(program):一个固定的运行逻辑和数据的集合,是一个静态的状态,一般存储在硬盘中

进程(process):一个正在运行的程序,是一个程序的一次运行,是一个动态的概念,一般存储在内存中。有自己的地址空间。

“多任务”:指操作系统能同时运行多个进程(程序)。如window7系统可以同时运行写字板程序、画图程序

进程(process):一个正在执行的程序,有自己独立的资源分配,是一个独立的资源分配单位。——独占内存

线程(thread):是进程内部单一的一个顺序控制流,一条独立的执行路径。多线程,在执行某个程序的时候,该程序可以有多个子任务,每个线程都可以独立的完成其中一个任务。在各个子任务之间,没有什么依赖关系,可以单独执行。

、WORD        、EXCEL等。

并行(parallel):多个任务(进程、线程)同时运行。在某个确定的时刻,有多个任务在执行

  条件:有多个cpu,多核编程

并发(concurrent):多个任务(进程、线程)同时发起。不能同时执行的(只有一个cpu),只能是同时要求执行。就只能在某个时间片内,将多个任务都有过执行。一个cpu在不同的任务之间,来回切换,只不过每个任务耗费的时间比较短,cpu的切换速度比较快,所以可以让用户感觉就像多个任务在同时执行。

主线程

在任何Java程序启动时,一个线程立刻运行(即main方法对应的线程),该线程通常称为程序的主线程

主线程的特点:

它是产生其他子线程的线程。

它不一定是最后完成执行的线程,子线程可能在它结束之后还在运行。

新建态:刚创建好对象的时候,刚new出来的时候

就绪态:线程准备好了所有运行的资源,只差cpu来临

运行态:cpu正在执行的线程的状态

阻塞态:线程主动休息、或者缺少一些运行的资源,即使cpu来临,也无法运行

死亡态:线程运行完成、出现异常、调用方法结束

      setDaemon(boolean on)

      必须在启动线程之前(调用start方法之前)调用setDaemon(true)方法,才可以把该线程设置为后台线程。

Callable接口

    Callable接口是对Runnable接口的增强,提供了一个call()方法,作为线程的执行体。但call()方法比run()方法功能更强大。

       call()方法可以有返回值

       call()方法可以抛出异常

使用FutureTask包装Callable对象,用来获得call方法的返回值。

现在我们所有学习的线程都要往 Thread 身上靠拢,要通过其start() 开启线程任务

Thread t = new Thread(Runnable 的实现类对象);

通过查看API 我们发现 其中有一个提供好的 实现类对象 FutureTask

查看API 我们发现FutureTask ft = new FutureTask(传递一个Callabel的实现类对象)

创建一个类 实现 Callable,重写里面的call() 方法

最终通过 t.start() 开启线程任务

第三种线程的实现方式

1, 创建Callanble的实现类对象,重写call()方法

2, 创建FutureTask对象的时候将 Callanble实现类对象进行传递

3, FutureTask是Runnable的实现类对象,所以创建Thread的时候可以把FutureTask

传递到Thread的构造方法中

4, 最终通过Thread中的 start()方法 开启线程任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲靖花式通幽处

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值