Java 两种简单的方式实现多线程

对于一些应用比如Server,需要对并发做出响应,那么需要用到多线程

两种实现多线程的方法:

  • 继承 Thread 类
  • 实现 Runnable 接口

继承 Thread 类

继承Thread类 必须重写run方法 ,然后调用start方法,即可执行

实现一个打印数字的线程类
在这里插入图片描述

package concurrent;

class printNumThread extends Thread
{
	String thname;
	printNumThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(int i=0; i<=26; i++) {
			System.out.printf("Thread name: %s , print num: %d\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printNumThread pt1 = new printNumThread("线程A");
		pt1.start();
		
		printNumThread pt2 = new printNumThread("线程B");
		pt2.start();
	}
}

实现 Runnable 接口

实现Runnable接口,可以重新run,也可以不写,但是值得注意的是直接调用Runnable的run,不会开启多线程,需要在Thread类的构造函数种传入我们实现的Runnable接口的对象,才能开启

错误示范:实现一个打印字母的类,可以看到输出仍然是串行的
在这里插入图片描述

package concurrent;

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printCharThread pt3 = new printCharThread("线程C");
		pt3.run();
		
		printCharThread pt4 = new printCharThread("线程D");
		pt4.run();
	}
}

正确方法:
Thread类构造函数传入实现的Runnable,调用Threadstart方法
在这里插入图片描述

package concurrent;

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
	
		printCharThread run3 = new printCharThread("线程C");
		Thread pt3 = new Thread(run3);
		pt3.start();
		
		printCharThread run4 = new printCharThread("线程D");
		Thread pt4 = new Thread(run4);
		pt4.start();
	}
}

两种方法:并行

在这里插入图片描述

package concurrent;

class printNumThread extends Thread
{
	String thname;
	printNumThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(int i=0; i<=26; i++) {
			System.out.printf("Thread name: %s , print num: %d\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class printCharThread implements Runnable {
	String thname;
	printCharThread(String threadName) {
		this.thname = threadName;
	}
	
	public void run() {
		for(char i='a'; i<='z'; i++) {
			System.out.printf("Thread name: %s , print char: %c\n", thname, i);
			try {
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

public class mutilThread {
	public static void main(String[] args) {
		
		printNumThread pt1 = new printNumThread("线程A");
		pt1.start();
		
		printNumThread pt2 = new printNumThread("线程B");
		pt2.start();
		
		printCharThread run3 = new printCharThread("线程C");
		Thread pt3 = new Thread(run3);
		pt3.start();
		
		printCharThread run4 = new printCharThread("线程D");
		Thread pt4 = new Thread(run4);
		pt4.start();
	}
}
发布了262 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44176696/article/details/105144399