首页 > 线程
头像
雪海中的白玉
编辑于 2020-09-13 16:04
+ 关注

线程

多线程
1.进程:是一个正在执行中的程序,每一个进程中都含有一个或多个控制单元(执行路径);
2.线程:进程中的一个独立的控制单元,一个进程中至少有一个线程;
3、多线程:一个进程中含有多个线程

单核和多核
单核:指单个cpu,其实是一种假的多线程,因为在一个时间单元,只能执行一个线程的任务
多核:指多个cpu(采用时间片),同时执行多个任务

并行、串行、并发
并行:指的是多个cpu(多核)同时处理多个任务
串行:指的是多个任务,执行一个任务完成后,在执行另一个任务
并发:指的是一个cpu(采用时间片)同时执行多个任务

特点
1、更好的利用cpu资源,创建线程的代价比较小
2、进程之间不能共享数据,但线程可以

线程的生命周期




线程的方法:
 isAilve()  : 判断线程是否还活着,
getPriority():获得线程优先级数据
setPriority():设置线程优先级数据
Thread.sleep():将当前线程睡眠指定毫秒数
join():将该线程的时间片让渡给另一个线程,等另一个线程结束,在运行该线程
yield():让出cpu,当前线程进入等待
wait():当前线程进入对象的wait pool
notify()/notifyAll():唤醒对象的wait pool中的一个/所有等待线程

同步 synchronized :

线程的同步有三种方式

  • Synchronized代码块:使用Synchronized代码块时,我们要可以让任意一个对象或类充当锁,

  • Synchronized方法:Synchronized方法时,在静态方法中系统默认调用当前类充当锁,在非静态方法只能系统默认当前对象充当锁。

  • Lock锁:在Lock锁中我们会创建一个Reentrant Lock 类实例来充当锁。通过lock()开启锁,unlock()关闭锁。

线程的同步详解

        Synchronized代码块,Synchronized方法锁的开启和关闭是自动的 ,隐式的。而Lock是显式的。

Thread
 // main 方法所在的方法是主线程

        // 3.开启线程
        MyThread myThread = new MyThread("线程1");
        // 通过 start() 调用 run()方法开启新线程
        myThread.start();

        MyThread2 myThread2 = new MyThread2("线程2");
        // 通过 start() 调用 run()方法开启新线程
        myThread2.start();

        // 主线程main
        for ( int i=0;i<1000;i++){
            System.out.println("++++++++++"+Thread.currentThread().getName());
        }

    }
}
/*
   同步---资源共享
 */
// 1.继承Thread
class  MyThread extends Thread{

    // 重写构造方法
    public MyThread(String name){
        super(name);
    }
    static int count = 0;

    // 2.重写 run()方法
    public void run(){
        for (int i = 0;i<1000;i++){
            // Thread.currentThread().getName() 获取当前线程的名称
            System.out.println((count++)+"~~~~~~~"+Thread.currentThread().getName());
        }
    }
}
// 在创建新线程- - 2
class  MyThread2 extends Thread{
    public MyThread2(String name){
        super(name);
    }

    // 2.重写 run()方法
    public void run(){
        for (int i = 0;i<1000;i++){
            // Thread.currentThread().getName() 获取当前线程的名称
            System.out.println("------------"+Thread.currentThread().getName());
        }
    }
}

Ruannable
 // 创建新线程 ---接口
        MvTh mvTh = new MvTh();
        // 使用Thread 方法
        Thread thread = new Thread(mvTh);
        thread.start();  // 开启新线程

        // 主线程
        for (int i =0;i<1000;i++){
            System.out.println("+++++++++"+Thread.currentThread().getName());
        }
    }
}

// 主要实现资源的共享
class  MvTh implements Runnable{
int count=0;
    // 重写run抽象方法
    public void run(){
        for (int i =0;i<1000;i++){
            System.out.println((count++)+"-------"+Thread.currentThread().getName());
        }
    }
}


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐