关于Thread.sleep()的问题

爬虫 发布于 2013/02/25 16:51
阅读 8K+
收藏 0
public class TestPrint {
	public static void print()
	{
		for (int i=0;i<100;i++)
		{
			System.out.print(i);
			try {
				Thread.sleep(2000);
				} catch (NumberFormatException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				} 
			System.out.print(i+3);

		}
	}
public class TestThread {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Thread() {
			
			public void run() {
				
				TestPrint.print();
			
			}
		}.start();
		
		
//		TestPrint.print();
		
	}
各位好,lz想做一个延迟的功能,别人就说了用Thread.sleep(),所以我就写了以上的测试程序试一下,原本以为Thread.sleep()只是能用到线程里,但我将主方法里的线程注释掉,直接使用
TestPrint.print();

还是会延迟2秒打印

lz有两点不解,

1.当主方法的线程不注释掉,调用

TestPrint.print()

时,Thread.sleep()里的线程是指哪个线程

2.当主方法的线程注释掉,调用

TestPrint.print()

时,为何还会跟没注释掉一样?


加载中
0
Grrrr
Grrrr

在sleep上面加上这行,你就明白了:

System.out.print(Thread.currentThread().getName());
第18行
TestPrint.print()
是main线程执行的。

爬虫
谢谢,你的头像好诱惑!
0
爬虫

引用来自“Grrrr”的答案

在sleep上面加上这行,你就明白了:

System.out.print(Thread.currentThread().getName());
第18行
TestPrint.print()
是main线程执行的。

如果,不用Thread.sleep的方法做,还有别的方法么
0
Grrrr
Grrrr

引用来自“爬虫”的答案

引用来自“Grrrr”的答案

在sleep上面加上这行,你就明白了:

System.out.print(Thread.currentThread().getName());
第18行
TestPrint.print()
是main线程执行的。

如果,不用Thread.sleep的方法做,还有别的方法么
package com.fhq.servlet;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestPrint implements Runnable {
	private Object lock = new Object();

	@Override
	public void run() {
		try {
			synchronized (lock) {
				for (int i = 0; i < 100; i++) {
					System.out.print(i);
					lock.wait(2000);
					System.out.print(i + 3);
					lock.notifyAll();
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
			return;
		}
	}

	public static void main(String args[]) {
		ExecutorService executor = Executors.newFixedThreadPool(1);
		TestPrint print = new TestPrint();
		executor.execute(print);
		executor.shutdown();
		while (!executor.isTerminated()) {
		}
	}
}
爬虫
谢谢你哈!受教了
返回顶部
顶部