多线程编程

1. 什么是线程?
       1) 一个线程是一个程序单个的连续控制;
    2) 一个软件能处理一系列的线程构造;
    3) 线程能同时运行,彼此独立;
    4) 包为java.lang.Thread;

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

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

4. 通过继承Thread类创建一个线程
       1) 定义
       public class MyThread extends Thread{
         public void run(){...}
       }
    2) 初始化
       MyThread testThread = new MyThread()

5. 通过实现runnable接口创建一个线程
       1) 定义
       public class MyRunnable implements Runnable {
         public void run(){...}
       }
    2) 初始化
       MyRunnable testRunnable = new MyRunnable();
       Thread testThread = new Thread(testRunnable)

6. 二种创建线程方法的比较
       1) 继承Thread类是面向对象编程;
    2) 实现Runnable接口解决了单继承

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

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

9. synchronized关键字
        1)  标识一组变量应该被一个线程独占地使用;
    2) public void push(char c){
         synchronized(this){
         ...
         }
       }
       public synchronized void push(char c) {
       ...
       }
    3) 所有对易碎数据的存取应当是同步的,由synchronized保护的易碎数据应当是private的。

10. 线程交互
        1)  wait():交出锁和CPU的占用;
    2) notify():将从对象的等待池中移走一个任意的线程,并放到锁池中,那里的对象一直在等待,直到可以获得对象的锁标记。
    3) notifyAll(): 将从等待池中移走所有等待那个对象的线程并放到锁池中,只有锁池中的线程能获取对象的锁标记,锁标记允许线程从上次因调用wait()而中断的地方开始继续运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值