Java学习----多线程

一 概念

  1. 进程:当前正在运行的应用程序,应用程序在内存中的执行区域
    线程:进程的一个执行控制单元,执行路径
    这里写图片描述
    一键加速,释放相关进程占用的内存(可以勾选要关闭的进程)

2. 进程与线程的关系

一个进程可以有多个线程

通过线程来运行程序
举个多线程例子 :①比如软件公司(进程)接了一个项目,但是实际干活的是公司里面的程序员(线程)。 ②杀毒软件,可以边杀毒,边体检,边清理垃圾。③ 下载软件,可以同时下载多部电影

3. 单线程与多线程

单线程:安全性高,效率低
多线程:安全性低,效率高

二 案例

1. JVM允许多线程

多线程效率高的原因:CPU执行程序是随机的,会在多个线程之间高速切换,若一个进程有多个线程,则会增加抢到CPU执行权的概率

2.CPU为何要随机执行程序

使用户感觉多个进程在同时执行,线程之间高速切换,实际上CPU只能执行一个线程。

3.编写线程类的方法

1.继承Thread类

2.创建Thread类,参数为 实现Runnable接口的对象
因为java单继承,继承了Thread便不能继承其他类,所以推荐第2种方式

4. 编写代码:

…..第一种方式
这里写图片描述

  1. 编写线程类

package com.blueSky.threadDemo;

public class MyThread extends Thread{

    @Override    //重写run()方法
    public void run() {
        for(int i=0;i<50;i++){
            System.out.println(this.getName()+"   "+ i); //输出当前线程对象的名字 和 变量i的值
        }
    }
}

2.编写测试类 main法中创建线程对象进行测试

 package com.blueSky.threadDemo;

public class ThreadTest {
    public static void main(String[] args) {
        MyThread myThread01 = new MyThread();  //创建第一个线程对象 
        myThread01.setName("线程A");           //设置线程的名字
        myThread01.start();                    //启动该线程

        MyThread myThread02 = new MyThread();  //创建第二个线程对象
        myThread02.setName("线程B");             //设置线程的名字
        myThread02.start();                     //启动线程
    }
}   

3.运行结果

这里写图片描述
若多个线程去修改一个变量,明显会提高运行效率,但是要注意共享数据
变量的值也可以从数据库获得。
main方法是单线程的。

…..第二种方式…
这里写图片描述
1.编写MyThread2类,实现Runnable接口,重写run方法

package com.blueSky.threadDemo2;
/*
 *  Thread.currentThread();    //静态方法  返回当前进程对象的引用
 * 
 * */
public class MyThread2 implements Runnable{
    private int count = 100 ;
    @Override
    public void run() {
        Thread thread = Thread.currentThread();    //返回当前进程对象的引用
        for(int i=0;i<=99;i++){
            if(count==0){
                break;
            }
            System.out.println( thread.getName() +"   " + (--count));
        }
    }

}

2.编写测试类,创建Thread对象,构造器参数为myThread2对象

package com.blueSky.threadDemo2;

public class Thread2Test {
    public static void main(String[] args) {
        //创建Thread类,构造函数 参数为实现Runnable接口的对象

        MyThread2 myThread01 = new MyThread2();   //创建MyThread对象
        Thread thread1 = new Thread(myThread01);   //创建Thread对象,参数为Runnable接口类型
        thread1.setName("线程1");
        thread1.start();

        Thread thread2 = new Thread(myThread01);  //创建Thread对象 ,构造器参数为myThread01
        thread2.setName("线程2");
        thread2.start();

    }
}

3.结果显示
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值