java 实现多线程的两种方式

分手后的思念是犯贱 2022-07-12 01:14 376阅读 0赞

随着互联网越来越普及,多线程的问题越来越重要,今天我们就来介绍一下java中的多线程问题

java中实现多线程有两种方法:

1、继承Thread类;

2、实现Runnable接口。

下面来详细介绍一下这两种多线程的实现方式:

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

  1. package com.duoxiancheng;
  2. public class MyThread extends Thread {
  3. @Override
  4. public void run() {
  5. for (int i = 0; i < 100; i++) {
  6. System.out.println("我是线程"+this.getId());
  7. }
  8. }
  9. public static void main(String[] args) {
  10. MyThread my1 = new MyThread() ;
  11. my1.run();
  12. MyThread my2 = new MyThread() ;
  13. my2.run();
  14. }
  15. }

执行结果如下:

  1. 我是线程9
  2. 我是线程9
  3. 我是线程9
  4. 我是线程9
  5. ..........
  6. 我是线程10
  7. 我是线程10
  8. 我是线程10
  9. 我是线程10
  10. 我是线程10
  11. .........

上面的代码中,直接调用的run()方法,并没有启动多线程,所以结果是顺序执行,my1.run()执行完之后在执行my2.run(),这样写这个多线程并没有任何意义。

如果想要启动多线程,应该使用start()方法启动多线程,start()方法会自动调用run()方法,新的代码如下:

  1. package com.duoxiancheng;
  2. public class MyThread extends Thread {
  3. @Override
  4. public void run() {
  5. for (int i = 0; i < 100; i++) {
  6. System.out.println("我是线程"+this.getId());
  7. }
  8. }
  9. public static void main(String[] args) {
  10. MyThread my1 = new MyThread() ;
  11. my1.start();
  12. MyThread my2 = new MyThread() ;
  13. my2.start();
  14. }
  15. }

运行两次,结果分别为:

第一次:

  1. ........
  2. 我是线程10
  3. 我是线程10
  4. 我是线程10
  5. 我是线程9
  6. 我是线程10
  7. 我是线程9
  8. 我是线程9
  9. 我是线程9
  10. 我是线程9
  11. 我是线程9
  12. 我是线程9

第二次:

  1. .......
  2. 我是线程10
  3. 我是线程9
  4. 我是线程9
  5. 我是线程9
  6. 我是线程10
  7. 我是线程10
  8. 我是线程10
  9. 我是线程10
  10. 我是线程10
  11. 我是线程10
  12. 我是线程9
  13. 我是线程10
  14. 我是线程10
  15. 我是线程10

通过start()方法启动的线程,不管my1.start()调用的run()方法是否执行完,都继续执行my2.start()方法,如果my2.start()后面还有其他的代码,同样不需要管my2.start()中的run()方法是否执行完,直接执行后面的代码。

2、实现Runnable代码

代码如下:

  1. package com.duoxiancheng;
  2. public class MyRunnable implements Runnable {
  3. private String threadName ;
  4. public MyRunnable(String tName) {
  5. this.threadName = tName ;
  6. }
  7. @Override
  8. public void run() {
  9. for (int i = 0; i < 100; i++) {
  10. System.out.println(threadName);
  11. }
  12. }
  13. public static void main(String[] args) {
  14. MyRunnable m1 = new MyRunnable("线程A") ;
  15. MyRunnable m2 = new MyRunnable("线程B") ;
  16. m1.run();
  17. m2.run();
  18. }
  19. }

运行结果:

  1. .......
  2. 线程A
  3. 线程A
  4. 线程A
  5. 线程A
  6. 线程A
  7. 线程A
  8. 线程A
  9. 线程A
  10. 线程A
  11. 线程A
  12. 线程A
  13. 线程A
  14. 线程A
  15. 线程A
  16. 线程A
  17. 线程A
  18. 线程B
  19. 线程B
  20. 线程B
  21. 线程B
  22. 线程B
  23. ........

和Thread的run()方法一样,上面代码的Runnable的run()方法也是普通方法的功能,需要等到m1.run(); 方法执行完成,才能执行m2.run();方法,不能实现多线程的意义,如果想要实现多线程,需要通过Thread类的start()方法启动。

代码如下:

  1. package com.duoxiancheng;
  2. public class MyRunnable implements Runnable {
  3. private String threadName ;
  4. public MyRunnable(String tName) {
  5. this.threadName = tName ;
  6. }
  7. @Override
  8. public void run() {
  9. for (int i = 0; i < 1000; i++) {
  10. System.out.println(threadName);
  11. }
  12. }
  13. public static void main(String[] args) {
  14. MyRunnable m1 = new MyRunnable("线程A") ;
  15. MyRunnable m2 = new MyRunnable("线程B") ;
  16. Thread t1 = new Thread(m1) ;
  17. Thread t2 = new Thread(m2) ;
  18. t1.start();
  19. t2.start();
  20. }
  21. }

运行结果如下:

  1. 线程A
  2. 线程A
  3. 线程B
  4. 线程B
  5. 线程B
  6. 线程B
  7. ........
  8. 线程B
  9. 线程B
  10. 线程B
  11. 线程A
  12. 线程A
  13. 线程A
  14. 线程A

发表评论

表情:
评论列表 (有 0 条评论,376人围观)

还没有评论,来说两句吧...

相关阅读

    相关 实现线方式

    实现线程的两种方式 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线