java多线程 基础

引入

 1.什么是线程

          线程是程序执行的一条路径, 一个进程中可以包含多条线程

          多线程并发执行可以提高程序的效率, 可以同时完成多项工作

 2.多线程的应用场景

          红蜘蛛同时共享屏幕给多个电脑

          迅雷开启多条线程一起下载

          QQ同时和多个人一起视频

          服务器同时处理多个客户端请求

并发与并行

并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)

 并发是指两个任务都请求运行,而处理器只能按受一个任务,就把这两个任务安排轮流进行,由于时间间隔较短,使人感觉两个任务都在运行。

 比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。

 如果用一台电脑我先给甲发个消息,然后立刻再给乙发消息,然后再跟甲聊,再跟乙聊。这就叫并发。

多线程(Java程序运行原理和JVM的启动是多线程的吗)

 A:Java程序运行原理

          Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法。

        

 B:JVM的启动是多线程的吗

          JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。

 

多线程的实现方式三种

1 继承thread 类 2实现Runnable接口3使用ExecutorService、Callable、Future实现有返回结果的多线程

1 继承thread 类

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



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

2实现Runnable

public class Demo3_Runnable {

    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");
        }
    }

}

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

 

new Thread("设置线程名字") {

    public void run() {

                   System.out.println(this.getName() + "....获取线程名字");

        }

  }.start(); 


Thread t2=new Thread() {

    public void run() {

                   System.out.println(this.getName() + "....获取线程名字");

        }

  }.start();
t2.setName("设置线程名字");

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

 

Thread.currentThread().getName()     Thread.currentThread().setName("我是主线程");       
 

多线程(休眠线程 sleep 所有线程都休眠)

Thread.sleep(毫秒,纳秒), 控制当前线程休眠若干毫秒1秒= 1000毫秒 1秒 = 1000 1000 1000纳秒 1000000000

猜你喜欢

转载自blog.csdn.net/qq_25825923/article/details/82667566