java线程、并发性学习笔记

1.并发性  

     多任务:在同一刻运行多个程序的能力。如今单台计算机可能拥有多个cpu,但是并发执行的进程数目并不是由cpu的数目制约的。操作系统将cpu的时间片分配给每一个进程,给人并行处理的感觉

    多线程程序:通常,每一个任务称为一个线程,多线程程序指可以同时运行一个以上线程的程序

2.线程

    线程(英语:thread):操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 

   多线程:指的是这个程序(一个进程)运行时产生了不止一个线程

   常见方法:java.lang.Thread中的方法:

  1.  static void sleep(long millis)  参数:mills 休眠的毫秒数
  2.  void start() 启动这个线程,将引发调用run()方法。这个方法将离级返回,并且新线程并发运行
  3. void run() 必须覆盖这个方法,并且在这个方法中提供要执行的任务指令
  4. void interrupt() 向线程发送中断请求。线程的中断状态被设置为true,如果该线程被阻塞,则抛出InterruptedException异常
  5. static boolean interrupted() 测试当前线程是否被中断。该方法为静态方法,调用时会将当前线程的中断状态设置为false
  6. boolean isInterrupted() 测试线程是否被终止,该方法不是静态方法,不改变线程的中断状态
  7. static Thread currentThread() 返回代表当前执行线程的Thread对象

2.1中断线程

    当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将终止。在java早期的版本中,有stop方法,其他线程可调用它终止线程,但是现已弃用。

    没有可以强制终止线程的方法,但是可以用interrupt()方法请求终止线程,当对一个线程调用该方法时,线程的【中断状态】将被置位。这是每一个线程都具有的boolean标志。每个线程都应该不时的检查这个标志,以判断线程是否被中断。我们可以使用

Thread.currentThread.isInterrupted()

方法判断该线程是否中断,但是当该线程阻塞时(调用sleep()方法或者wait()方法时),会抛出InterruptedException异常。

2.2线程状态

    线程状态

  • New (新创建)
  • Runnable (可运行)
  • Blocked (被阻塞)
  • Waiting (等待)
  • Timed waiting (计时等待)
  • Terminated (被终止)

要确定一个线程的当前状态,可调用getState方法

新线程创建

    当new一个新线程时,该线程还没有开始运行。

可运行线程

     一段调用start方法,线程处于runnable状态。一个可运行线程可能正在运行、可能也没有,这取决于操作系统给线程提供运行的时间。一旦一个线程开始运行,它不必始终保持运行。运行中的线程被中断,目的时为了让其他线程获得运行机会。

    线程调度的细节依赖于操作系统提供的服务。【抢占式调度系统】给每一个可运行线程一个时间片来执行任务。当时间片用完,操作系统剥夺该线程的运行权,并给另一个线程运行机会。当选择下一个线程时,操作系统考虑线程的优先级。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值