Java多线程
【摘要】 Java多线程
Java多线程编程
何为多线程,通俗的讲就是让你的代码同时干好几件事。
而我们的一个代码文件或者一个项目就是一个进程,而如果我们想提高效率,我们可以多开几个文件进行多进程,也可以在进程中创建多线程(多写几个方法),但是多进程比较耗费资源,所以一般推荐多线程,在代码里,让代码做几个文件做的事。
多线程编程可以让我们的代码拥有更高效率。
1.线程的工作过程
犹如上图
使用多线程需要先创建一个或者多个线程
然后让线程调用CPU资源,开始运行
然后运行完毕等待所有线程运行完毕
然后删除资源,结束线程
2.Java线程拥有优先级
优先级就是系统确定线程的调度顺序,但是不执行顺序,因为多线程的执行是具有无序性的。
调度顺序只是系统分配资源的顺序,不分配资源就无法执行。
3.创建多线程
如何在Java代码中创建多线程,Java内置了用于多线程的库。
3.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.println(name+2);
System.out.println(name+3);
System.out.println(name+4);
System.out.println(name+5);
}
}
运行结果(还可以体现线程的无序性):

3.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 Thread(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.3实现Callable接口,实现call方法
这个我研究了挺大一会儿。
实现这个接口后,还需要实现call方法
然后通过FutureTask类来对我们实例化对象进行封装
最后还要实例化Thread类进行start操作开启我们的线程
代码演示:
public class TheadText {
public static void main(String[] args) {
//先实例化
StartCallable a = new StartCallable();
//然后调用FutureTask类
FutureTask<String> te1 = new FutureTask<>(a);
//设置我们的name属性
a.name = " 一 ";
//开启我们的线程一
new Thread(te1).start();
StartCallable b = new StartCallable();
FutureTask<String> te2 = new FutureTask<>(b);
b.name = " 二 ";
new Thread(te2).start();
StartCallable c = new StartCallable();
FutureTask<String> te3 = new FutureTask<>(c);
c.name = " 三 ";
new Thread(te3).start();
StartCallable d = new StartCallable();
FutureTask<String> te4 = new FutureTask<>(d);
d.name = " 四 ";
new Thread(te4).start();
}
}
/**
* 实现Callable接口,实现call方法
*/
class StartCallable implements Callable<String>{
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;
}
}
运行结果:

4.线程的生命周期
线程在我们创建后(出生)等待CPU的资源分配,然后开始工作,在工作完我们分配的工作后,就会(死亡)消失
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)