java多线程调用方法_JAVA多线程的使用方法(从代码理解定义)

1、多线程的创建

注意:线程开启不一定立即执行,由CPU调度执行

1.1创建方式一

继承Thread类,重写run()方法,调用start()方法开启线程。

package SunThread;

public class Thread_01 extends Thread{

@Override

public void run() {

//run方法线程体

for (int i = 0; i < 20; i++) {

System.out.println("我在写代码!");

}

}

public static void main(String[] args) {

//main线程,主线程

//创建线程对象

Thread_01 thread_01 = new Thread_01();

//调用start开启线程

thread_01.start();

for (int i = 0; i < 20; i++) {

System.out.println("我在学JAVA");

}

}

}

1518027f5925b723d6e905790139c748.png

多次运行发现(最好修改循环输出次数多一点),输出结果一般会不同,原因就是CPU在进行线程的调度。

1.2创建方式二(建议使用)

实现Runnable接口,重写run()方法,实现接口需要丢入Runnable接口实现类,调用start()方法开启线程。

package SunThread;

public class Thread_03 implements Runnable{

@Override

public void run() {

//run方法线程体

for (int i = 0; i < 20; i++) {

System.out.println("我在写代码");

}

}

public static void main(String[] args) {

//main线程,主线程

//创建ruunnable实现类对象

Thread_03 thread_03 = new Thread_03();

//创建线程对象通过线程对象实现我们的接口类

//Thread thread = new Thread(thread_03);

//thread.start();

new Thread(thread_03).start();//与上两行实现的结果是一样的

for (int i = 0; i < 100; i++) {

System.out.println("我在学JAVA");

}

}

}

1cd6023ce8c74bd361e1ccd01b40281b.png

推荐使用:实现Runable()接口,因为可以有效的避免单继承的局限性,灵活方便,方便同一个对象被多个线程使用

1.3创建方式三(不经常使用)

​与使用runnable方式相比,callable功能更强大些:call方法可以有返回值,方法可以抛出异常,支持泛型的返回值,需要借助FutureTask类,获取返回结果等。

运用三个线程下载网络图片的方式,对Callable实现接口类的方式进行解释,(代码直接复制运行不了)。

package SunThread;

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

import java.net.URL;

import java.util.concurrent.*;

public class Thread_05 implements Callable {

private String url;//下载的网络图片地址

private String name;//保存的文件名

public Thread_05(String url, String name) {

this.url = url;

this.name = name;

}

@Override

public Boolean call() throws Exception {

WebDownloader webDownloader = new WebDownloader();

webDownloader.Downloader(url,name);

System.out.println("文件name为"+name);

return true;

}

public static void main(String[] args) throws ExecutionException, InterruptedException {

//new 3个Callable接口的对象

Thread_05 t1 = new Thread_05("https://img-blog.csdnimg.cn/20201029222157503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NVTl9fQ0dK,size_16,color_FFFFFF,t_70#pic_center","1.jpg");

Thread_05 t2 = new Thread_05("https://img-blog.csdnimg.cn/20201029222523262.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NVTl9fQ0dK,size_16,color_FFFFFF,t_70#pic_center","2.jpg");

Thread_05 t3 = new Thread_05("https://img-blog.csdnimg.cn/20201029222403840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NVTl9fQ0dK,size_16,color_FFFFFF,t_70#pic_center","3.jpg");

//创建固定线程个数为3个的线程池

ExecutorService executorService = Executors.newFixedThreadPool(3);

//提交执行线程,最多3个

Future s1 = executorService.submit(t1);

Future s2 = executorService.submit(t2);

Future s3 = executorService.submit(t3);

//获取相应的结果

boolean rs1=s1.get();

boolean rs2=s2.get();

boolean rs3=s3.get();

//关闭线程池

executorService.shutdown();

}

}

//具体的下载方法,使用时需要导入commons—IO-2.6.jar包

class WebDownloader{

public void Downloader(String url,String name){

try {

FileUtils.copyURLToFile(new URL(url),new File(name));

} catch (IOException e) {

e.printStackTrace();

}

}

}

8d2dc83e224ca28e6c599ac0475dab12.png

注:中间并发进行的接口对象,根据自己需要进行修改。

2、线程五大状态

2.1线程的停止(stop)

1.建议线程正常停止―>利用次数,不建议死新环.

2.建议使用标志位--->设置一个标志位

3.不要使用stop或者destroy等过时或者JDK不建议使用的方法

package SunThread;

//测试线程停止

public class Threadstop_01 implements Runnable{

private boolean flag=true;

@Override

public void run() {

int i=0;

while (flag){

System.out.println("我在测试线程停止"+i++);

}

}

public void stop(){

this.flag=false;

}

public static void main(String[] args) {

Threadstop_01 threadstop_01 = new Threadstop_01();

new Thread(threadstop_01).start();

for (int i = 0; i < 1000; i++) {

System.out.println("main"+i);

if(i==900)

{

threadstop_01.stop();

System.out.println("线程停止了");

}

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值