Java进阶必备之多线程编程

网友投稿 264 2022-10-24


Java进阶必备之多线程编程

一、图示

二、多线程编程

何为多线程,通俗的讲就是让你的代码同时干好几件事。

而我们的一个代码文件或者一个项目就是一个进程,而如果我们想提高效率,我们可以多开几个文件进行多进程,也可以在进程中创建多线程(多写几个方法),但是多进程比较耗费资源,所以一般推荐多线程,在代码里,让代码做几个文件做的事。

多线程编程可以让我们的代码拥有更高效率。

三、线程的工作过程

犹如上图

使用多线程需要先创建一个或者多个线程

然后让线程调用CPU资源,开始运行

然后运行完毕等待所有线程运行完毕

然后删除资源,结束线程

java线程拥有优先级

优先级就是系统确定线程的调度顺序,但是不执行顺序,因为多线程的执行是具有无序性的。

调度顺序只是系统分配资源的顺序,不分配资源就无法执行。

四、创建多线程

如何在Java代码中创建多线程,Java内置了用于多线程的库。

1.继承Thread类,重写run()方法

我们需要写一个类A来继承Thread类,并重写run()方法。

run()方法里面放我们需要进行多线程的代码。

然后再在主类中实例化类A的对象,并且调用strat方法。

public class TheadText {

public static void main(String[] args) {

//实例化StartThread,并调用start方法使线程动起来

StartThread t1 = new StartThread("一 ");

t1.start();

StartThread t2 = new StartThread("二 ");

t2.start();

StartThread t3 = new StartThread("三 ");

t3.start();

StartThread t4 = new StartThread("四 ");

t4.start();

}

}

/**

* 1.继承Thread类并重写run方法

*/

class StartThread extends Thread{

String name;

StartThread(String name){

this.name = name;

}

@Override

public void run() {

System.out.println(name+1);

System.out.pbxvmlvvkyprintln(name+2);

System.out.println(name+3);

System.out.println(name+4);

System.out.println(name+5);

}

}

运行结果(还可以体现线程的无序性):

2. 实现接口Runnable接口,实现run方法

使用Runnable接口避免了单继承的局限性,线程类只是实现了 Runnable 接口,还可以继承其他类

public class TheadText {

public static void main(String[] args) {

StartRunnable startRunnable1 = new StartRunnable(" 一 ");

Thread te1 = new Thread(startRunnable1);

te1.start();

StartRunnable startRunnable2 = new StartRunnable(" 二 ");

Thread te2 = new Thread(startRunnable2);

te2.start();

StartRunnable startRunnable3 = new StartRunnable(" 三 ");

Thread te3 = new Thhttp://read(startRunnable3);

te3.start();

StartRunnable startRunnable4 = new StartRunnable(" 四 ");

Thread te4 = new Thread(startRunnable4);

te4.start();

}

}

/**

* 2. 实现Runnable接口,实现run方法

*/

class StartRunnable implements Runnable{

String name;

// 重载一下方法,利于区分

StartRunnable(String name){

this.name = name;

}

@Override

public void run() {

System.out.println(name+1);

System.out.println(name+2);

System.out.println(name+3);

System.out.println(name+4);

System.out.println(name+5);

}

}

运行结果:

3. 实现Callable接口,实现call方法

这个我研究了挺大一会儿。

实现这个接口后,还需要实现call方法

然后通过FutureTask类来对我们实例化对象进行封装

最后还要实例化Thread类进行start操作开启我们的线程

代码演示:

public class TheadText {

public static void main(String[] args) {

//先实例化

StartCallable a = new StartCallable();

//然后调用FutureTask类

FutureTask te1 = new FutureTask<>(a);

//设置我们的name属性

a.name = " 一 ";

//开启我们的线程一

new Thread(te1).start();

StartCallable b = new StartCallable();

FutureTask te2 = new FutureTask<>(b);

b.name = " 二 ";

new Thread(te2).start();

StartCallable c = new StartCallable();

FutureTask te3 = new FutureTask<>(c);

c.name = " 三 ";

new Thread(te3).start();

StartCallable d = http://new StartCallable();

FutureTask te4 = new FutureTask<>(d);

d.name = " 四 ";

new Thread(te4).start();

}

}

/**

* 实现Callable接口,实现call方法

*/

class StartCallable implements Callable{

String name ;

public String call() throws Exception{

System.out.println(name+1);

System.out.println(name+2);

System.out.println(name+3);

System.out.println(name+4);

return name;

}

}

运行结果:

线程的生命周期

线程在我们创建后(出生)等待CPU的资源分配,然后开始工作,在工作完我们分配的工作后,就会(死亡)消失


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:OSI七层模型
下一篇:双证书体系key usage扩展——Outlook使用证书发送加密签名邮件
相关文章

 发表评论

评论列表