打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java之线程初步

定义线程

1、扩展java.lang.Thread类,实现run()方法,直接调用start()方法。

2、实现java.lang.Runnable接口,然后传递给Thread对象,调用start()方法。

线程模型

  每个线程有一个自己的栈。

线程的状态

1、线程睡眠是帮助所有线程获得运行机会的最好方法。sleep()是静态方法,只能控制当前正在运行的线程。

2、线程的让步是通过Thread.yield()来实现的。线程优先级为1~10之间的正整数。

  线程默认优先级是5,Thread类中有三个常量,定义线程优先级范围:
  static int MAX_PRIORITY 
            线程可以具有的最高优先级。 
  static int MIN_PRIORITY 
            线程可以具有的最低优先级。 
  static int NORM_PRIORITY 
            分配给线程的默认优先级。
实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。(和Windows API Sleep一样)

线程同步

1、join()方法。  

  保证当前线程停止执行,直到该线程所加入的线程完成为止。join()方法可以设置超时时间间隔。

2、对象锁。

  Java中每个对象都有一个内置锁。当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。

  一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁。(这点相当别扭)

  只能同步方法,而不能同步变量和类。(极其恶心)

  在使用同步代码块时候,应该指定在哪个对象上同步,也就是说要获取哪个对象的锁。例如:

  

  可以同步静态方法。

  静态同步方法和非静态同步方法将永远不会彼此阻塞,因为静态方法锁定在Class对象上,非静态方法锁定在该类的对象上。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JAVA面试700问(六) | 并发编程网
Java 多线程(三) 线程的生命周期及优先级
Java 多线程启动为什么调用 start() 方法而不是 run() 方法?
你对Thread掌握多少?幸好我准备了
Java高级-解析Java中的多线程机制 — JAVA频道
java 线程优先级与yield()
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服