多线程-java
继承Thread
public class ThreadTest extends Thread{ private ThreadTestMain test; //private ThreadTestJunit test;
@Override public void run(){ synchronized (this){ if(test.student_number_op>0){ Date date = new Date(); long time1 = new Date().getTime(); System.out.println(Thread.currentThread().getName()+"打了一份饭,还剩下"+--test.student_number_op+"个学生没有打,现在的时间是"+time1); } } } }
实现Runnable接口,
Runnable是接口,Thread是类,Thread类实现了Runnable接口,
Runnable与Thread避免了继承的局限,一个类可以实现多个接口,只能继承一个类;
继承了Thread就无法继承其他类
public class RunnableTest implements Runnable{ private ThreadTestMain test; //private ThreadTestJunit test;
@Override public void run(){ synchronized (this){ if(test.student_number_op>0){ Date date = new Date(); long time1 = new Date().getTime(); System.out.println(Thread.currentThread().getName()+"打了一份饭,还剩下"+--test.student_number_op+"个学生没有打,现在的时间是"+time1); } } } }
main,
public class ThreadTestMain { public static final int Thread_Number = 100; public static final int Student_Number = 1000; public static int student_number_op = Student_Number;
public static int thread_number_op = Thread_Number; public static ThreadTest ThreadTest = new ThreadTest(); public static RunnableTest RunnableTest = new RunnableTest(); public static void main(String[] args) { // TODO Auto-generated method stub int i = 0; while (thread_number_op>0) { new Thread(ThreadTest, ++i+"号饭堂窗口").start();
//new Thread(RunnableTest, ++i+"号饭堂窗口").start();
i++;
thread_number_op--;
}
}
}
Junit,电脑不好操作要谨慎,会卡死;
Junit不会等待所有线程都执行完才结束,多线程测试还是用main比较靠谱
public class ThreadTestJunit extends Thread{ public static final int Thread_Number = 100; public static final int Student_Number = 1000; public static int student_number_op = Student_Number; public static ThreadTest ThreadTest = new ThreadTest(); public static RunnableTest RunnableTest = new RunnableTest(); @Before public void setUp() throws Exception { student_number_op = Student_Number; } @After public void tearDown() throws Exception { } @Test public void test1() { int i = 0; while (student_number_op>0) { new Thread(ThreadTest, ++i+"号饭堂窗口").start(); i++; } } @Test public void test2() { int i = 0; while (student_number_op>0) { new Thread(ThreadTest, ++i+"号饭堂窗口").start(); i++; } } }