本来大一的时候学过多线程,但受限于当时的理解水平有限,一直对这块不是很熟练,在我深入学习Java的时候,对于多线程有了更深层次的认识,分享于此,与君共勉。
1.从一道题目引入1)自定义多线程类PrimThread求解整数begin到end之间的素数;
(2)定义主类ForkAndJoin,利用PrimThread创建多个线程求解1到10000000之间的素数和,要求输出计算时间。
简单来说就是通过多个线程同时计算来快速计算素数。文末有直接的代码,本文第六节多线程常见问题的解答。是如果想深入探讨这个题目,可以完整的看完本篇文章。
package excise;
/**
* @author CoderXshuai
*/
public class MainTest {
public static void main(String[] args) {
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
}
//为了方便,把内部类设置为静态,可以直接调用,正常情况下不要定义为静态的
static class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println("线程" + Thread.currentThread().getName() + "正在运行");
}
}
}
继承Thread类,重写run()方法。
2.2.实现Runnable接口Runnale接口内部也是继承自Thread类,而且因为Java的单继承多实现的特性,一般都是实现Runnable接口,然后实现run()方法。代码如下:
package excise;
/**
* @author CoderXshuai
*/
public class MainTest {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyThread());
Thread thread2 = new Thread(new MyThread());
thread1.start();
thread2.start();
}
static class MyThread implements Runnable {
@Override
public void run() {
System.out.println("线程" + Thread.currentThread().getName() + "正在运行");
}
}
}
3.线程的生命周期
在main方法中新建两个MyThread对象,然后分别启动它们,即可在控制台得到
多运行几次也可能得到
为什么会有随机出现的顺序?
这点要从线程的生命周期来说
原创文章 18获赞 5访问量 877
关注
私信
展开阅读全文
作者:HandsomeCodeBoy