THread

THread是个生成线程的类,他包含有对象name;实现THread,必须包含run方法



synchronized(this){
需要同步的代码

同一个时间内,只能有一个线程访问被锁住的代码部分,synchronized可以修饰一个函数

      1. 任意的一个对象都可以做为锁对象。
        2. 在同步代码块中调用了sleep方法并不是释放锁对象的。
        3. 只有真正存在线程安全问题的时候才使用同步代码块,否则会降低效率的。
        4. 多线程操作的锁 对象必须 是唯一共享 的。否则无效。



join():加入一个线程,原来的语句必须让步给新加入的线程;
wait():一个线程如果执行了wait方法,那么该线程就会进去一个以锁对象为标识符的线程池中等待并且释放锁
notify():如果一个线程执行notify方法,那么就会唤醒被等待的线程
n.start();启动线程;

方式一 :
    1. 自定义一个类继承Thread类。
    2. 重写Thread类的run方法,把自定义线程的任务代码写在run方法上。
    3. 创建Thread的子类对象,并且调用start方法启动一个线程。
        
    注意:千万不要直接调用run方法,调用start方法的时候线程就会开启,线程一旦开启就会执行run方法中代码,如果直接调用
    run方法,那么就 相当于调用了一个普通的方法而已。

方式二:
    1. 自定义一个类实现Runnable接口。
    2. 实现Runnable接口 的run方法,把自定义线程的任务定义在run方法上。
    3. 创建Runnable实现类对象。
    4. 创建Thread类 的对象,并且把Runnable实现类的对象作为实参传递。
    5. 调用Thread对象 的start方法开启一个线程。。

原文地址:https://www.cnblogs.com/liyong999/p/7927983.html