java单线程和多线程的区别

1.单线程和多线程的区别?

你早上上班,正要打卡的时候,手机响了。。你如果先接了电话,等接完了,在打卡,就是单线程。
如果你一手接电话,一手打卡。就是多线程。
这两件事的结果是一样的。。你接了电话且打了卡。

(1)最常见的一个线程例子:

package com.ggx.thread;
public class OnlyThread{
	public static void main(String[] args){
		System.out.println("我就是一个线程");
	}
}

当程序启动运行时,就自动产生一个线程,主方法main就在这个主线程上运行。我们的程序都是由线程来执行的。

(2)控制该线程的行为

package com.ggx.thread;

public class OnlyThread {

	@SuppressWarnings("static-access")
	public static void main(String[] args) {
		Thread thread = Thread.currentThread();// 获取当前线程的引用(这里并没有创建新的线程)
		thread.setName("我是孤零零的一个线程");// 设置当前线程名称
		System.out.println(thread.getName() + ":正在运行");
		for (int i = 0; i <= 5; i++) //当前线程循环睡眠
		{
			try 
			{
				System.out.println(thread.getName()+"第:" + i+"次睡眠,当前时间"+System.currentTimeMillis());
				thread.sleep(5000);//让当前线程睡眠五秒钟
				System.err.println(thread.getName()+"第:" + i+"次觉醒,当前时间"+System.currentTimeMillis());
				thread.sleep(1000);//这里是为了方便区分控制台的输出,因为两次间隔毫秒数相同,打印的顺序会有错乱让线程睡了一秒,这样输出顺序容易观察
				System.out.println();//换行
			} catch (InterruptedException e) 
			{
				System.out.println(thread.getName()+"异常");
				e.printStackTrace();
			}
		}
	}
}
</span>

程序运行结果:
我是孤零零的一个线程:正在运行
我是孤零零的一个线程第:0次睡眠,当前时间1439734065648
我是孤零零的一个线程第:0次觉醒,当前时间1439734070663


我是孤零零的一个线程第:1次睡眠,当前时间1439734071666
我是孤零零的一个线程第:1次觉醒,当前时间1439734076668


我是孤零零的一个线程第:2次睡眠,当前时间1439734077670
我是孤零零的一个线程第:2次觉醒,当前时间1439734082673


我是孤零零的一个线程第:3次睡眠,当前时间1439734083675
我是孤零零的一个线程第:3次觉醒,当前时间1439734088687


我是孤零零的一个线程第:4次睡眠,当前时间1439734089690
我是孤零零的一个线程第:4次觉醒,当前时间1439734094694


我是孤零零的一个线程第:5次睡眠,当前时间1439734095696
我是孤零零的一个线程第:5次觉醒,当前时间1439734100711

当程序启动运行时,就自动产生一个线程,主方法main就在这个主线程上运行。我们的程序都是由线程来执行的。

线程在建立后并不马上执行run方法中的代码,而是处于等待状态。线程处于等待状态时,可以通过Thread类的方法来设置线程各种属性,如线程的优先级(setPriority)、线程名(setName)和线程的类型(setDaemon)等。

注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。




上一篇:LOG4J输出日志到web目录的相对路径


下一篇:ShareKit