谈一谈java线程相关知识

谈一谈java线程

什么是线程?

  • 一个线程是一个程序单个的连续控制;
  • 一个软件能处理一系列的线程构造;
  • 线程能同时运行,彼此独立; cpu 3000000000/s
  • 包为java.lang.Thread;

线程或上下文的构成

  • 一个虚拟处理机;
  • CPU执行的代码可以或不可以由多个线程共享,这和数据是独立的。两个线程如果执行同一个类的实例代码,则它们可以共享相同的代码。
  • 代码操作的数据可以或不可以由多个线程共享,这和代码是独立的。两个线程如果共享对一个公共对象的存取,则它们可以共享相同的数据。

线程机制

  • 当线程开始,run()方法里代码被执行;
  • 创建线程的二种方法:
    a. 继承Thread类;
    b. 实现Runnable接口。

通过继承Thread类创建一个线程

  • 定义
  public class MyThread extends Thread{
     public void run(){...}
   }
  • 初始化
   MyThread testThread = new MyThread()

通过实现runnable接口创建一个线程

  • 定义
   public class MyRunnable implements Runnable {
     public void run(){...}
   }
  • 初始化
MyRunnable testRunnable = new MyRunnable();
   Thread testThread = new Thread(testRunnable)

二种创建线程方法的比较

  • 继承Thread类是面向对象编程;
  • 实现Runnable接口解决了单继承

线程调度

  • 线程是抢占式的,但并不一定是分时的;
  • 有多个线程可运行,但只有一个线程在实际运行。
  • 所有可运行线程根据优先级保存在池中,当一个被阻塞的线程变成可运行时,它会被放入相应的可运行池,优先级最高的非空池中的线程得到处理机时间。
  • sleep()调用会给较低优先级线程一个运行的机会,yield()方法只会给相同优先级线程一个执行的机会。

线程的基本控制

  • 启动线程:使用start()方法,这意味着线程可以由JVM调度并执行,并不意味着线程就会立即执行。
  • 终止一个线程:当一个线程结束运行并终止时,它就不能再运行了。
  • 测试一个线程:isAlive()方法用来确定一个线程是否仍是活的。活着的线程并不意味着线程正在运行。
  • 延迟线程:
    sleep():使线程停止一段时间,间隔期满后,线程不一定立即恢复执行。
    join():挂起当前线程,直至它所调用的线程终止。

synchronized关键字

  • 标识一组变量应该被一个线程独占地使用;
	 public void push(char c){
         synchronized(this){
         ...
         }
       }
       public synchronized void push(char c) {
       ...
       }

说明:所有对易碎数据的存取应当是同步的,由synchronized保护的易碎数据应当是private的。

线程交互

  • wait():交出锁和CPU的占用;
  • notify():将从对象的等待池中移走一个任意的线程,并放到锁池中,那里的对象一直在等待,直到可以获得对象的锁标记。
  • notifyAll(): 将从等待池中移走所有等待那个对象的线程并放到锁池中,只有锁池中的线程能获取对象的锁标记,锁标记允许线程从上次因调用wait()而中断的地方开始继续运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值