java多线程编程(java多线程编程核心技术)

2023-12-11 00:02:24 数码极客 bianji01

 

java 多线程是什么?

线程定义比较抽象,简单的说就是一个代码执行流。许多执行流可以混合在一起由CPU调度。线程是允许各种任务交互执行的方式。

Java的线程在操作系统的实现模式依系统不同而不同,可能是系统级别的进程或线程,但对于程序员来说并没有影响。

任务交互的一个好处是增加程序响应。如一个界面程序执行一段耗时的数据库查询,使用单独的线程可以让界面依然响应用户的其他输入,而单线程只能等待查询结束再处理。

JVM以及操作系统会优先处理优先级别高的线程,但不代表这些线程一定会先完成。设定优先级只能建议系统更快的处理,而不能强制。

另外,在运行时,并没有按照函数分界,而是按照机器码/汇编码分界。也就是说不保证任何一段代码是被完整而不打断的执行的(除非你已经使用同步手段)。正由于如此,各种线程同步的方法应运而生。

java多线程有几种实现方法

继承Thread类来实现多线程:

当我们自定义的类继承Thread类后,该类就为一个线程类,该类为一个独立的执行单元,线程代码必须编写在run()方法,run方法是由Thread类定义,我们自己写的线程类必须重写run方法。

run方法中定义的代码为线程代码,但run方法不能直接调用,如果直接调用并没有开启新的线程而是将run方法交给调用的线程执行

要开启新的线程需要调用Thread类的start()方法,该方法自动开启一个新的线程并自动执行run方法中的内容

请点击输入图片描述

请点击输入图片描述

*java多线程的启动顺序不一定是线程执行的顺序,各个线程之间是抢占CPU资源执行的,所有有可能出现与启动顺序不一致的情况。

CPU的调用策略:

如何使用CPU资源是由操作系统来决定的,但操作系统只能决定CPU的使用策略不能控制实际获得CPU执行权的程序。

线程执行有两种方式:

1.抢占式:

目前PC机中使用最多的一种方式,线程抢占CPU的执行权,当一个线程抢到CPU的资源后并不是一直执行到此线程执行结束,而是执行一个时间片后让出CPU资源,此时同其他线程再次抢占CPU资源获得执行权。

2.轮循式;

每个线程执行固定的时间片后让出CPU资源,以此循环执行每个线程执行相同的时间片后让出CPU资源交给下一个线程执行。

java中实现多线程的方法有几种以及如何实现多线程

java 如何实现多线程

java多线程实现方式有两种种继承java.lang.thread类另种实现java.lang.runnable接口下面两种方式简单代码继承thread类方式:import java.lang.thread; //用集成thread类方式实现多线程 public class test{ public static void main(string arg[]){ t t1=new t(); t t2=new t(); //更改新线程名称 t1.setname("t1"); t2.setname("t2"); //启动线程 t1.start(); t2.start(); } } class t extends thread{ //重写run()方法 public void run(){ system.out.println(this.getname()); } }输出结:t1t2实现runnable接口方式:使用runnable接口时需要建立thread实例因此无论通过thread类还runnable接口建立线程都必须建立thread类或子类实例import java.lang.*; //用实现runnable接口方式实现多线程 public class test{ public static void main(string arg[]){ t t1=new t(); t t2=new t(); //定要实例化thread对象实现runnable接口对象作参数传入 thread th1=new thread(t1,"t1"); thread th2=new thread(t2,"t2"); //启动线程 th1.start(); th2.start(); } } class t implements runnable{ //重写run()方法 public void run(){ system.out.println(thread.currentthread().getname()); } }输出结:t1t2public void run()方法java线程执行体方法所有线程操作都从run方法开始有点类似于main()方法即主线程

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告