简述:
1. 简单用一下Java的多线程的两种粗略的实现方法
继承Thread和实现Runnable接口
实现:
1. 随机给一个自然数n, 分发给多个线程, 每个线程计算n项的Fibonacci数列的和,计算完成后输出,
1)继承Thread类实现,并重写run()方法
package test.multithread.Fibonacci; import java.util.Random; public class TestA_1 extends Thread{ private int n; private static int taskCount = 0; private final int id = taskCount++; public TestA_1(int n) { this.n = n; } public static void main(String[] args){ for(int i = 0;i < 10;i++){ Random random = new Random(); Integer x = random.nextInt(100); new TestA_1(x).start(); } } @Override //run implement the counting of different n public void run() { int sum = 0; if(n == 0 || n == 1){ sum += n; }else{ sum = 1; for(int i = 1;i < n;i++){ sum += i; } } System.out.println("id: " + id + ",\t" + n + ": " + sum); Thread.yield(); // now the CPU could transfer the thread to a new Thread } }
2)实现Runnable接口中run方法
package test.multithread.Fibonacci; import java.util.Random; public class TestA_2 implements Runnable{ private int n; private static int taskCount = 0; private final int id = taskCount++; public TestA_2(int n) { this.n = n; } public static void main(String[] args){ for(int i = 0;i < 10;i++){ Random random = new Random(); Integer x = random.nextInt(100); new TestA_2(x).run(); } } @Override //run implement the counting of different n public void run() { int sum = 0; if(n == 0 || n == 1){ sum += n; }else{ sum = 1; for(int i = 1;i < n;i++){ sum += i; } } System.out.println("id: " + id + ",\t" + n + ": " + sum); Thread.yield(); // now the CPU could transfer the thread to a new Thread } }
结论,从这个测试上看两者在多线程的实现上都可以完成,任务的分发,目前没什么区别
两者输出相似都如:id是线程的id, 后面的数字是Fibonacci数列n个项的和