《实战Java高并发程序设计》(葛一鸣、郭超)学习笔记

第2章 Java并行程序基础2.1 有关线程你必须知道的事进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程就是轻量级进程,是程序执行的最小单位。2.2 初始线程:线程的基本操作2.2.1 新建线程(1)继承Thread类,重写run()方法 Thread t=new Thr...
摘要由CSDN通过智能技术生成

第2章 Java并行程序基础

2.1 有关线程你必须知道的事

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程就是轻量级进程,是程序执行的最小单位。

 

2.2 初始线程:线程的基本操作

2.2.1 新建线程

(1)继承Thread类,重写run()方法

 

Thread t=new Thread();

t.start();

 

默认情况下,Thread的run()方法什么也没有做,因此,一个线程一启动就结束了。

如果想让线程做点什么,就必须重写run()方法,把你的“任务”填进去。

 

//此代码采用匿名内部类,重写run()方法

Thread t=newThread(){ 

@Override

      public void run(){

       System.out.println(“I am 线程t”)

     }

};

t.start();

 

(2)实现Runnable接口

        Runnable接口是一个单方法接口,它只有一个run()方法:

 

public interface Runnable{

      public abstract void run();

}

 

2.2.2 终止线程

    (1)stop()方法:stop()方法已被废弃,因为它太过暴力,强行把执行到一半的线程终止,可能会引起一些数据不一致的问题。

     (2)设置标记变量:用于指示线程是否需要退出

 

2.2.3 线程中断

        严格地讲,线程中断并不会使线程立即退出,而是给目标线程一个通知,告知目标线程有人希望你退出了。

与线程中断有关的3个方法:

 

1.public void Thread.interrrupt()   //中断线程

2.public boolean Thread.isInterrrupted()  //判断是否被中断

3.public static boolean Thread.interrupted()   //判断是否被中断,并清除当前中断状态

方法签名:方法名+参数列表

 

Thread.sleep()方法签名:public static native void sleep(long millis) throws InterruptedException

InterruptedException是非运行时异常,程序必须捕获并处理它,当线程在sleep()休眠时,如果被中断,这个异常就会产生。

注意:Thread.sleep()方法由于中断而抛出异常,此时,他会清除中断标记,如果不加出理,那么下一次循环开始时,就无法捕获这个中断,故异常出理中,再次设置中断标记位。

 

2.2.4 等待(wait)和通知(notify)

wait()和notify()方法位于Object类中,任何对象都可调用这两个方法。

方法签名:

public final void wait() throws InterruptedException

public final native void notify()

 

    当在一个对象实例上调用wait()方法时候,当前线程就会在这个对象上等待。等到何时结束?等到其它线程调用了notify()方法为止。

多个线程同时等待某一个对象,当object.notify()被调用时,他就会从这个等待队列中,随机选择一个线程,并将其唤醒。这是不公平的。

Object对象还有一个类似的notifyAll()方法,它和notify()的功能基本一致,不同的是,它会唤醒在这个等待队列中所有等待的线程。

注意:Object.notify()并不是可以随意调用,它必须包含在对应的synchronized语句中,无论是wait()和notify()都需要首先获得目标对象的一个监视器。

    注意:Object.wait()和Thread.sleep()方法都可以让线程等待若干时间,除了wait()可被唤醒外,另外一个主要区别就是wait()ff会释放目标对象的锁,而Thread.sleep()方法不会释放任何资源。

 

2.2.5 挂起(suspend)和继续执行(resume)线程

    一对相反的操作。它们已被标记为废弃方法,不推荐使用。

    不推荐使用suspend()去挂起线程的原因:suspend()导致线程暂停的同时,它并不会释放任何锁资源。其它任何线程想要访问被它暂用的锁时,都会被牵连,导致无法正常继续执行。

 

2.2.6 等待线程结束(join)和谦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值