通过运行方法和Start方法执行Thread
Executing Thread by run method and Start method
我正在尝试使用 thread.Run 以及 thread.start
将 Thread 执行到 Both 方法中
这里是案例
主要 Class
Thread thread = new GetTimeZones();
ByImletingInterface thread21 = new ByImletingInterface();
thread21.getMailStarttime(5);
ByImletingInterface thread2 = new ByImletingInterface();
thread2.getMailStarttime(10);
thread.start();
new Thread(thread21).start();
new Thread(thread2).start();
线程 1
public class ByImletingInterface implements Runnable {
private int starttime;
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(starttime * 1000);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
System.out.println("Checking Mail");
}
}
和其他人
public class GetTimeZones extends Thread {
@SuppressWarnings("static-access")
@Override
public void run() {
// TODO Auto-generated method stub
Locale locale;
DateFormat timeforMatter;
DateFormat dateforMatter;
String timeoutput = null;
String dateoutput = null;
try {
java.util.Date date;
for (int i = 0; i < 20; i++) {
date = new Date();
locale = new Locale("en");
timeforMatter = DateFormat.getTimeInstance(DateFormat.DEFAULT,
locale);
dateforMatter = DateFormat.getDateInstance(DateFormat.DEFAULT,
locale);
//System.out.println(timeforMatter);
timeoutput = timeforMatter.format(date);
dateoutput = dateforMatter.format(date);
System.out.println(timeoutput);
System.out.println(dateoutput);
System.out.println();
try {
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
e.printStackTrace();
}
super.run();
}
}
如何描述我的概率 class 是不需要的,但我还是给了它。
当我像以前一样使用 therad.start 进入主 class 时。它有意识地执行三个线程。
但是当我使用 theread.run 时,一个一个地执行。意味着它的同步。为什么会这样?
当你调用run()
方法时,你是运行在当前线程上调用它,所以它当然会运行一个一个地执行,因为只有一个线程(每个 run()
方法将在前一个方法完成后执行)。
只有当你调用start()
时才会创建一个新线程并在那个新线程中执行run()
方法。
我正在尝试使用 thread.Run 以及 thread.start
将 Thread 执行到 Both 方法中这里是案例 主要 Class
Thread thread = new GetTimeZones();
ByImletingInterface thread21 = new ByImletingInterface();
thread21.getMailStarttime(5);
ByImletingInterface thread2 = new ByImletingInterface();
thread2.getMailStarttime(10);
thread.start();
new Thread(thread21).start();
new Thread(thread2).start();
线程 1
public class ByImletingInterface implements Runnable {
private int starttime;
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(starttime * 1000);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
}
System.out.println("Checking Mail");
}
}
和其他人
public class GetTimeZones extends Thread {
@SuppressWarnings("static-access")
@Override
public void run() {
// TODO Auto-generated method stub
Locale locale;
DateFormat timeforMatter;
DateFormat dateforMatter;
String timeoutput = null;
String dateoutput = null;
try {
java.util.Date date;
for (int i = 0; i < 20; i++) {
date = new Date();
locale = new Locale("en");
timeforMatter = DateFormat.getTimeInstance(DateFormat.DEFAULT,
locale);
dateforMatter = DateFormat.getDateInstance(DateFormat.DEFAULT,
locale);
//System.out.println(timeforMatter);
timeoutput = timeforMatter.format(date);
dateoutput = dateforMatter.format(date);
System.out.println(timeoutput);
System.out.println(dateoutput);
System.out.println();
try {
Thread.sleep(2000);
} catch (Exception e) {
// TODO: handle exception
}
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
e.printStackTrace();
}
super.run();
}
}
如何描述我的概率 class 是不需要的,但我还是给了它。
当我像以前一样使用 therad.start 进入主 class 时。它有意识地执行三个线程。
但是当我使用 theread.run 时,一个一个地执行。意味着它的同步。为什么会这样?
当你调用run()
方法时,你是运行在当前线程上调用它,所以它当然会运行一个一个地执行,因为只有一个线程(每个 run()
方法将在前一个方法完成后执行)。
只有当你调用start()
时才会创建一个新线程并在那个新线程中执行run()
方法。