java多线程

java多线程

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

概念

流程:一个正常的程序运行。
每个程序都有一个运行顺序。这个序列是一个运行路径,或致电控制单元。

程: 就是进程中的一个独立的控制单元,线程在控制着进程的运行。

一个进程中至少有一个线程。或者说至少一个控制单元。
样例:jvm启动不止一个线程,还有负责垃圾回收的线程。

创建线程方式一

  • 继承Thread类
    步骤:
    1、定义类继承Thread
    2、复写Thread类中的run方法
    目的:把自己定义代码,放在run方法中,让线程运行。

    3、调用线程中的start方法
    start方法有两个作用。启动线程和调用run方法

通过运行这样的方法的运行结果的每次都不一样,由于多个线程获取CPU的运行权,CPU运行到谁。谁就运行。
也就是说,在某一个时刻,仅仅能有一个程序运行(多核CPU除外),CPU做着高速的切换。以达到看上去是同一时候运行的效果。

我们能够形象的把多线程的运行是互相争夺CPU的运行权。

多线程的一个特性:随机性

package com.vobile;

class Test extends Thread {
    public void run(){
        for (int j = 0; j < 20; j++){
            System.out.println("j = " + j + "-------------");
        }       
    }
}

class ThreadDemo1{
    public static void main(String[] args){
        Test test = new Test(); //创建一个线程

        test.start();

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

    }
}

//运行结果
i= 0+++++++++++++++++
i= 1+++++++++++++++++
j = 0-------------
i= 2+++++++++++++++++
j = 1-------------
i= 3+++++++++++++++++
j = 2-------------
i= 4+++++++++++++++++
j = 3-------------
i= 5+++++++++++++++++
j = 4-------------
……

获取线程的名称 和对象

  • 名称
    线程都有自己默认的名称
    线程的名字为:thread-编号 编号从0開始
    获取名称:getName()
    设置名称:setName(); 或者构造函数的方式进行名称设置
  • 获取对象
    static Thread currentThread();方法

创建线程方式二

  • 实现Runnable接口
    1、子类覆盖接口中的run方法。

    2、通过Thread类创建线程,并将实现了Runnable接口的子类对象作为參数传递给Thread类的构造函数。

    3、Thread类对象调用start方法开启线程。

多线程安全问题

  • 比如:买票问题,出现了不该出现的票
  • 问题原因:
    当多条语句在操作同一个线程的共享数据时,一个线程对多条语句仅仅运行了一部分,还没有运行完成,而还有一个线程參与进来运行,导致共享数据错误。
  • 解决的方法
    对多条操作共享数据的语句。仅仅能让一个线程运行完,在运行过程中,其它线程不能够參与运行。

    对象如同锁。持有锁的线程能够在同步中运行。没有锁的线程,即使获得CPU的运行权,也进不去。

    由于没有获取锁。

  • 同步的前提
    1、必须使用2个或以上的线程
    2、必须多个线程使用同一个锁

  • 同步的优点
    解决可多线程的安全问题

  • 同步的缺点
    多个线程都须要推断锁,较为消耗性能

待续…

package com.vobile;

/** * 三个线程交替运行 * */
class Test extends Thread {
    private String name;
    public Test(String name){
        this.name = name;
    }

    public void run(){
        for (int j = 0; j < 20; j++){
            System.out.println(this.name + " test run... " + j);
        }       
    }
}

class ThreadDemo1{
    public static void main(String[] args){
        Test test1 = new Test("one"); //创建一个线程
        Test test2 = new Test("two");

        test1.start();
        test2.start();
        for(int i = 0; i<20; i++){
            System.out.println("main ... " + i);
        }

    }
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117056.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sendgrid java,Sendgrid的Java不在Maven的工作

    sendgrid java,Sendgrid的Java不在Maven的工作Iamusinghttp github com sendgrid sendgrid javainmyapp WhenItriedto javaitscausi lang NoClassDefFo

    2025年8月7日
    3
  • linux安装jdk环境(多种方式)

    linux安装jdk环境(多种方式)linux系统通用安装通过tar.gz压缩包安装此方法适用于绝大部分的linux系统1、先下载tar.gz的压缩包,这里使用官网下载。进入:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html勾选接受许可协议后选择对应的压缩包,下载完成后上传的linux…

    2025年7月9日
    3
  • 蓝桥杯 2014真题 史丰收速算

    蓝桥杯 2014真题 史丰收速算标题 史丰收速算史丰收速算法的革命性贡献是 从高位算起 预测进位 不需要九九表 彻底颠覆了传统手算 速算的核心基础是 1 位数乘以多位数的乘法 其中 乘以 7 是最复杂的 就以它为例 因为 1 7 是个循环小数 0 如果多位数超过 就要进 1 同理 2 7 3 7 6 7 也都是类似的循环小数

    2025年9月7日
    2
  • 想入行3D游戏建模,看我这个你还敢想吗?

    想入行3D游戏建模,看我这个你还敢想吗?所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不会给开的很

    2022年5月12日
    44
  • 多模态综述

    多模态综述多模态综述介绍参考文献:《MultimodalMachineLearning:ASurveyandTaxonomy》介绍我们身边的环境就是一个多模态的环境,看到的实体、听到的声音、闻到的气味和尝到的味觉。本篇综述不是着重于多模态的应用,而是重点关注多模态的方法和技术。多模态问题的定义在于数据来源是不同模态的数据,而这些数据具有异质性(heterogeneity),则带来了多模态的五个挑战:representation,translation,alignment,fusion和co-

    2022年6月17日
    87
  • 深入解析 kubernetes 资源管理,容器云牛人有话说

    深入解析 kubernetes 资源管理,容器云牛人有话说

    2022年4月3日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号