zoukankan      html  css  js  c++  java
  • 线程基础概念性的东西

    1.什么是线程
    * 线程是程序执行的一条路径, 一个进程中可以包含多条线程
    * 多线程并发执行可以提高程序的效率, 可以同时完成多项工作
    * 2.多线程的应用场景
    * 红蜘蛛同时共享屏幕给多个电脑
    * 迅雷开启多条线程一起下载
    * QQ同时和多个人一起视频
    * 服务器同时处理多个客户端请求

    ###24.02_多线程(多线程并行和并发的区别)(了解)
    * 并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)
    * 并发是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。
    * 比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。
    * 如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟甲聊,再跟乙聊。这就叫并发

    线程的实现方式有两种:

    1.继承Thread
    * 定义类继承Thread
    * 重写run方法
    * 把新线程要做的事写在run方法中
    * 创建线程对象
    * 开启新线程, 内部会自动执行run方法
    *

    public class Demo2_Thread {

    /**
    * @param args
    */
    public static void main(String[] args) {
    MyThread mt = new MyThread(); //4,创建自定义类的对象
    mt.start(); //5,开启线程

    for(int i = 0; i < 3000; i++) {
    System.out.println("bb");
    }
    }

    }
    class MyThread extends Thread { //1,定义类继承Thread
    public void run() { //2,重写run方法
    for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
    }
    }

    2.实现Runnable
    * 定义类实现Runnable接口
    * 实现run方法
    * 把新线程要做的事写在run方法中
    * 创建自定义的Runnable的子类对象
    * 创建Thread对象, 传入Runnable
    * 调用start()开启新线程, 内部会自动调用Runnable的run()方法

    public class Demo3_Runnable {
    /**
    * @param args
    */
    public static void main(String[] args) {
    MyRunnable mr = new MyRunnable(); //4,创建自定义类对象
    //Runnable target = new MyRunnable();
    Thread t = new Thread(mr); //5,将其当作参数传递给Thread的构造函数
    t.start(); //6,开启线程

    for(int i = 0; i < 3000; i++) {
    System.out.println("bb");
    }
    }
    }

    class MyRunnable implements Runnable { //1,自定义类实现Runnable接口
    @Override
    public void run() { //2,重写run方法
    for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
    }

    }

    用匿名内部类来实现两种线程的方式

    继承Thread类

    new Thread() { //1,new 类(){}继承这个类
    public void run() { //2,重写run方法
    for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
    }
    }.start();
    * 实现Runnable接口

    new Thread(new Runnable(){ //1,new 接口(){}实现这个接口
    public void run() { //2,重写run方法
    for(int i = 0; i < 3000; i++) { //3,将要执行的代码,写在run方法中
    System.out.println("bb");
    }
    }
    }).start();

    多线程(获取名字和设置名字)

    1.获取名字
    * 通过getName()方法获取线程对象的名字
    * 2.设置名字
    * 通过构造函数可以传入String类型的名字
    *
    new Thread("xxx") {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(this.getName() + "....aaaaaaaaaaaaaaaaaaaaaaa");
    }
    }
    }.start();

    new Thread("yyy") {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(this.getName() + "....bb");
    }
    }
    }.start();
    * 通过setName(String)方法可以设置线程对象的名字
    *
    Thread t1 = new Thread() {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(this.getName() + "....aaaaaaaaaaaaaaaaaaaaaaa");
    }
    }
    };

    Thread t2 = new Thread() {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(this.getName() + "....bb");
    }
    }
    };
    t1.setName("芙蓉姐姐");
    t2.setName("凤姐");

    t1.start();
    t2.start();

    获取当前线程用Thread.current.

    Thread.currentThread(), 主线程也可以获取
    *
    new Thread(new Runnable() {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(Thread.currentThread().getName() + "...aaaaaaaaaaaaaaaaaaaaa");
    }
    }
    }).start();

    new Thread(new Runnable() {
    public void run() {
    for(int i = 0; i < 1000; i++) {
    System.out.println(Thread.currentThread().getName() + "...bb");
    }
    }
    }).start();
    Thread.currentThread().setName("我是主线程"); //获取主函数线程的引用,并改名字
    System.out.println(Thread.currentThread().getName());

    线程之Join 方法的使用

    当前线程暂停, 等待指定的线程执行结束后, 当前线程再继续

    final Thread t1 = new Thread() {
    public void run() {
    for (int i = 0; i < 10; i++) {
    System.out.println(this.getName() + "...aaa");
    }
    }
    };
    Thread t2 = new Thread() {
    public void run() {
    for (int i = 0; i < 10; i++) {
    if (i == 2) {
    try {
    t1.join();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    System.out.println(this.getName() + "....bbb");
    }
    }

    };
    t1.start();
    t2.start();
    }
    }

    多线程(设置线程的优先级)
    * setPriority()设置线程的优先级

  • 相关阅读:
    java开发环境
    堆栈方法区的创建
    Jmeter- 笔记8
    Jmeter- 笔记7
    Jmeter- 笔记6
    Jmeter- 笔记5
    Jmeter- 笔记4
    Jmeter- 笔记3
    Jmeter- 笔记2
    Jmeter- 笔记1
  • 原文地址:https://www.cnblogs.com/lixiaowei395659729/p/7140692.html
Copyright © 2011-2022 走看看