• 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对象上,非静态方法锁定在该类的对象上。

  • 相关阅读:
    多项式求逆
    luoguP3380 【模板】二逼平衡树(树套树)
    NTT
    poj2728 Desert King
    eclipse使用
    Java之面向对象
    Python实现终端高亮显示
    requests
    Go基础
    0919CSP-S模拟测试赛后总结
  • 原文地址:https://www.cnblogs.com/tekkaman/p/2065127.html
Copyright © 2020-2023  润新知