参考资料
1 Java线程:创建与启动
[url]http://lavasoft.blog.51cto.com/62575/99151[/url]
[b]运用场景:[/b]
[color=red]在使用很多线程的时候,要区分每个线程的标记,就要加上你自定义线程的名字,sleep也经常用,比如你在发送邮件或者执行其它任务的时候,想要每间隔多少秒执行一次,sleep就会用上[/color] :lol:
[color=blue]线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总是mian,非主线程的名字不确定。
sleep方法属于Thread类中方法,表示让一个线程进入睡眠状态,等待一定的时间之后,自动醒来进入到可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程的运行也需要时间,一个线程对象调用了sleep方法之后,并不会释放他所持有的所有对象锁,所以也就不会影响其他进程对象的运行。但在sleep的过程中过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有 finally语句块)以及以后的代码[/color]
[b]sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
sleep(long millis, int nanos)
在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行)[/b]
Thread它有8个不同的构造函数,如下:
[img]http://dl.iteye.com/upload/attachment/566782/523ba523-dbb8-3eb9-aa10-12b1ddb570d3.jpg[/img]
示例A
示例B
输出结果如下:
1 Java线程:创建与启动
[url]http://lavasoft.blog.51cto.com/62575/99151[/url]
[b]运用场景:[/b]
[color=red]在使用很多线程的时候,要区分每个线程的标记,就要加上你自定义线程的名字,sleep也经常用,比如你在发送邮件或者执行其它任务的时候,想要每间隔多少秒执行一次,sleep就会用上[/color] :lol:
[color=blue]线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总是mian,非主线程的名字不确定。
sleep方法属于Thread类中方法,表示让一个线程进入睡眠状态,等待一定的时间之后,自动醒来进入到可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程的运行也需要时间,一个线程对象调用了sleep方法之后,并不会释放他所持有的所有对象锁,所以也就不会影响其他进程对象的运行。但在sleep的过程中过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有 finally语句块)以及以后的代码[/color]
[b]sleep(long millis)
在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
sleep(long millis, int nanos)
在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行)[/b]
Thread它有8个不同的构造函数,如下:
[img]http://dl.iteye.com/upload/attachment/566782/523ba523-dbb8-3eb9-aa10-12b1ddb570d3.jpg[/img]
示例A
import java.util.Date;
public class MyThread extends Thread {
@SuppressWarnings("deprecation")
@Override
public void run() {
System.out.println("咫尺天涯的第一个线程(Thread)启动了。。。");
while(true){
System.out.println("系统默认的线程名字: "+ this.getName()+",自定义线程名字: " + Thread.currentThread().getName() +",当前秒: " + new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
示例B
import java.util.Date;
public class MyRunnable implements Runnable {
@SuppressWarnings("deprecation")
@Override
public void run() {
System.out.println("咫尺天涯的第一个线程(Runnable)启动了。。。");
while(true){
System.out.println("自定义线程名字: "+Thread.currentThread().getName()+",当前秒: " + new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread,"咫尺天涯(Thread)");
thread.start();
MyRunnable myRunnable = new MyRunnable();
Thread runnable = new Thread(myRunnable,"咫尺天涯(Runnable)");
runnable.start();
}
}
输出结果如下:
咫尺天涯的第一个线程(Thread)启动了。。。
咫尺天涯的第一个线程(Runnable)启动了。。。
系统默认的线程名字: Thread-0,自定义线程名字: 咫尺天涯(Thread),当前秒: 37
自定义线程名字: 咫尺天涯(Runnable),当前秒: 37
自定义线程名字: 咫尺天涯(Runnable),当前秒: 38
系统默认的线程名字: Thread-0,自定义线程名字: 咫尺天涯(Thread),当前秒: 38
自定义线程名字: 咫尺天涯(Runnable),当前秒: 39
系统默认的线程名字: Thread-0,自定义线程名字: 咫尺天涯(Thread),当前秒: 39
自定义线程名字: 咫尺天涯(Runnable),当前秒: 40
系统默认的线程名字: Thread-0,自定义线程名字: 咫尺天涯(Thread),当前秒: 40
自定义线程名字: 咫尺天涯(Runnable),当前秒: 41
系统默认的线程名字: Thread-0,自定义线程名字: 咫尺天涯(Thread),当前秒: 41