我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么创建Java线程对象

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么创建Java线程对象

本篇内容介绍了“怎么创建Java线程对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

默认情况下,主线程和垃圾回收线程都是由系统创建的,但是我们需要完成自己的功能----创建自己的线程对象

 java将线程面向对象了,形成的类就是Thread,在Thread类内部执行任务的方法叫run()

 注意:如果想让run作为任务区,必须让他去被自动调用.我们通过执行start()方法,来开启线程,继而实现run方法的自动调用.

主线程的名字:main   子线程的名字:从Thread-0开始命名

//创建自己的线程对象

//分析:由于我们实现的实际功能Thread类是决定不了的,所以没有办法将我们的功能放入Thread的run方法里,如果我们想实现自己的功能,可以写Thread类的子类,重写run方法,实现我们的功能.run就是我们的任务区

实现多线程的方式两种:

 第一种方式:通过创建Thread子类的方式实现功能----线程与任务绑定在了一起,操作不方便

 第二种:将任务从线程中分离出来,哪个线程需要工作,就将任务交给谁,操作方便

当线程与任务分离后

这里Thread内部默认有一个run,又通过ticket传入一个run,为什么优先调用的是传入的run

如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

线程安全

synchronized关键字:

synchronized关键字的作用域有二种:

1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;

2)是某个类的范围,synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。

除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/区块/},它的作用域是当前对象;

synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;

实现线程安全的方式:

在代码中使用同步代码块儿(同步锁)

解释:在某一段任务中,同一时间只允许一个线程执行任务,其他的线程即使抢到了cpu,也无法进入当前的任务区间,只有当当前的线程将任务执行完后,其他的线程才能有资格进入

同步代码块儿的构成:

synchronized(锁(对象)){

  同步的代码

 }

对作为锁的对象的要求:

必须是对象      

必须保证被多个线程共享

可以充当锁的:

一个普通的对象      

当前对象的引用--this    

类的字节码文件 --注意:字节码文件的使用范围太大,一般不建议使用.

同步代码块儿的特点:

可以保证线程的安全    

由于每次都要进行判断处理,所以降低了执行效率

总结:什么时候使用同步代码块儿

多个线程共享一个数据

至少有两个线程

比较同步代码块儿和同步函数

同步代码块儿使用更加的灵活,只给需要同步的部分代码同步即可,而同步函数是给这个函数内的所有代码同步.

由于处于同步的代码越少越好,所以最好使用同步代码块儿

注意:1.当在一个类中同时存在多个synchronized修饰的代码块儿或函数时,要想安全,就必须让他们后面的对象一致。因为只有同一把锁才能安全。

同步函数的锁:this

2静态同步函数在进内存的时候不会创建对象,但是存在其所属类的字节码文件对象,属于class类型的对象,

所以静态同步函数的锁是其所属类的字节码文件对象

示例:

    //使用同步代码块儿

    public void addMoney(int money) {

        synchronized (Bank.class) {

            this.money += money;

            System.out.println(this.money);

        }

    }

    //使用同步函数

    //非静态的同步函数

    //在synchronized后面默认有一个this

    public synchronized void addMoney(int money) {

        this.money += money;

        System.out.println(this.money);

    }

 wait():让当前的线程变成等待的状态,放入一个池子(线程容器),失去了抢cpu的能力,.等待唤醒(锁相当于给当前的线程做了一个标记)

notify():让当前的线程从等待状态唤醒,相当于从池子中取出线程.(唤醒的是同一把锁下的任意一个线程)

notifyAll():唤醒的是同一把锁下的所有线程

死锁:出现的情况有两种

 1.所有的线程处于等待状态

 2.锁之间进行嵌套调用

Lock

比较synchronized和Lock

 1.synchronized:从jdk1.0就开始使用的同步方法-称为隐式同步

 synchronized(锁对象){//获取锁      我们将锁还可以称为锁旗舰或者监听器

 同步的代码

 }//释放锁

 2.Lock:从jdk1.5开始使用的同步方法-称为显示同步

 原理:Lock本身是接口,要通过他的子类创建对象干活儿

 使用过程:

 首先调用lock()方法获取锁

 进行同步的代码块儿

 使用unlock()方法释放锁

 使用的场景:

 当进行多生产者多消费者的功能时,使用Lock,其他的都使用synchronized

 使用效率上:Lock高于synchronized

线程的停止: 3种

 1.通过一个标识结束线程

 2.调用stop方法---因为有固有的安全问题,所以系统不建议使用.

 3.调用interrupt方法----如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。

守护线程:

相当于后台线程.依赖于前台线程.正常情况下,当前台线程结束的时候,不管守护线程有没有结束,都会立刻结束.

 典型的守护线程:垃圾回收线程

 当程序调用setDaemon方法时,并且将参数设置成true.当前线程就变成了守护线层.

 注意:这个方法一定要在start方法之前调用

 thread0.setDaemon(true);

 thread0.start();

join()方法:

 原理:线程一旦调用了join方法,他的优先级会高于主线程.主线程会等当前的线程执行完后再去执行.

 注意点:优先级只比main线程的高.对其他的线程没有影响.

 当线程开始工作后,让t0调用join方法,让他的优先级高于main线程

 注意:join方法必须在线程开始工作后,执行.

     t0.start();      try {          t0.join();      } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

“怎么创建Java线程对象”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么创建Java线程对象

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么创建Java线程对象

本篇内容介绍了“怎么创建Java线程对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!默认情况下,主线程和垃圾回收线程都是由系统创建的,但是
2023-06-02

Java中怎么创建自己的线程对象

本篇内容主要讲解“Java中怎么创建自己的线程对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中怎么创建自己的线程对象”吧!默认情况下,主线程和垃圾回收线程都是由系统创建的,但是我们需
2023-06-02

怎么创建Java对象

这篇文章主要介绍“怎么创建Java对象”,在日常操作中,相信很多人在怎么创建Java对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么创建Java对象”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、
2023-06-16

java怎么创建对象

在Java中,可以使用关键字new来创建一个对象。创建对象的一般语法是: = new ();其中,是要创建对象的类名,是对象的引用变量名,new关键字用于创建对象,后面跟着的()用于调
java怎么创建对象
2024-02-29

java中怎么创建对象

这篇文章主要介绍了java中怎么创建对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中怎么创建对象文章都会有所收获,下面我们一起来看看吧。1、检查类是否加载。当虚拟机遇到new指令时,首先检查该指令的
2023-06-30

Java对象的创建过程

Java对象创建过程1、JVM遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。然后加载这个类;推荐学习:java视频教程2、为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,最终常用的办法“本地线程缓冲分配(T
Java对象的创建过程
2019-04-12

java对象创建的过程

1、检查指令的参数是否能在常量池中定位到一个类的符号引用 2、检查此符号引用代表的类是否已被加载、解析和初始化过。如果没有,就先执行相应的类加载过程 3、类加载检查通过后,接下来虚拟机将为新生对象分配内存。 4、内存分配完成之后,虚拟机将分
2023-08-30

怎么用java反射创建对象

使用Java反射创建对象需要以下步骤:1. 获取Class对象:首先需要获取要创建对象的类的Class对象。可以通过类名直接调用`Class.forName("类的全限定名")`方法,也可以通过对象的getClass()方法获取。2. 调用
2023-10-10

Java怎么创建和销毁对象

这篇文章主要介绍了Java怎么创建和销毁对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么创建和销毁对象文章都会有所收获,下面我们一起来看看吧。一、介绍Java由Sun Microsystems发明
2023-07-04

如何用Java多线程在mail中创建Thread对象

这篇文章将为大家详细讲解有关如何用Java多线程在mail中创建Thread对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java多线程有很多的知识需要我们学习,在学习的时候还是需要我们
2023-06-17

java怎么创建多线程

在Java中,有两种方法可以创建多线程:1. 继承`Thread`类:创建一个类,继承自`Thread`类,并重写`run()`方法,将线程执行的代码放在`run()`方法中。然后创建该类的实例,调用`start()`方法启动线程。```j
2023-08-12

Java线程对象怎么理解

这篇文章主要讲解了“Java线程对象怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程对象怎么理解”吧!线程的并发与并行在单CPU系统中,系统调度在某一时刻只能让一个线程运行
2023-06-17

Java中怎么创建和销毁对象

这篇文章将为大家详细讲解有关Java中怎么创建和销毁对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、考虑用静态工厂方法代替构造器:构造器是创建一个对象实例最基本也最通用的方法,大部分开
2023-06-17

怎么在java中创建一个对象

这篇文章给大家介绍怎么在java中创建一个对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5.
2023-06-14

Java中怎么给对象创建内存

这篇文章将为大家详细讲解有关Java中怎么给对象创建内存,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java对象创建内存图解析1. 栈Java栈的区域很小 , 特点是存取的速度特别快,栈存
2023-06-20

java中怎么使用new创建对象

在Java中,可以使用关键字new来创建一个对象。具体的语法是:类名 对象名 = new 类名();其中,类名是要创建对象的类的名称,对象名是创建的对象的引用名称。例如,创建一个名为person的Person类的对象,可以使用以下代码
2023-10-24

java怎么创建一个类的对象

在Java中,可以通过以下步骤创建一个类的对象:1. 首先,你需要创建一个类。一个类是一个模板,用于定义对象的属性和方法。```javapublic class MyClass { // 定义类的属性 private int m
2023-10-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录