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异常。

时间: 2024-12-31 12:53:23

java单线程和多线程的区别的相关文章

操作系统基础知识之————单线程(Thread)与多线程的区别

单线程(Thread)与多线程的区别 (一)首先了解一下cpu:        随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐渐成为瓶颈,最高为4G,事实上目前3.6G主频的CPU已经接近顶峰.        多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用 CPU 而只和 I/O , OEM BIOS 等资源打交道时,让需要占用 CPU 资源的其它线程有机会获得CPU

基于Java回顾之多线程详解_java

线程是操作系统运行的基本单位,它被封装在进程中,一个进程可以包含多个线程.即使我们不手动创造线程,进程也会有一个默认的线程在运行. 对于JVM来说,当我们编写一个单线程的程序去运行时,JVM中也是有至少两个线程在运行,一个是我们创建的程序,一个是垃圾回收. 线程基本信息 我们可以通过Thread.currentThread()方法获取当前线程的一些信息,并对其进行修改. 我们来看以下代码: 复制代码 代码如下: 查看并修改当前线程的属性 String name = Thread.currentT

浅谈java中异步多线程超时导致的服务异常_java

在项目中为了提高大并发量时的性能稳定性,经常会使用到线程池来做多线程异步操作,多线程有2种,一种是实现runnable接口,这种没有返回值,一种是实现Callable接口,这种有返回值. 当其中一个线程超时的时候,理论上应该不 影响其他线程的执行结果,但是在项目中出现的问题表明一个线程阻塞,其他线程返回的接口都为空.其实是个很简单的问题,但是由于第一次碰到,还是想了一些时间的.很简单,就是因为阻塞的那个线 程没有释放,并发量一大,线程池数量就满了,所以其他线程都处于等待状态. 附上一段自己写的调

控制-关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题?

问题描述 关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题? class Producer//这个是单生产线,单消费问题,一个单生产线有多条路径的问题(最后的效果的输入输出线程轮流执行) { public static void main(String[] args) { //创建资源 Resource res=new Resource(); //创建线程 input in=new input(res); output out=new outpu

Java中StringBuffer和StringBuilder区别_java

早先用Java的时候,知道有个类叫StringBuffer,用来拼接较长的字符串.转到C#之后,也有一个似类功能的类叫作StringBuilder,简写都是sb,非常好记. 再后来转移回Java的时候,发现Java也有了StringBuilder,于是就好奇了一下为什么在StringBuffer之后又推出了StringBuilder. 原来Java的StringBuilder(和C#一样)是非线程安全的,而早先的StringBuffer具有一定的线程安全属性.当然,推出StringBuilder

Java进阶05 多线程

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!    多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式. 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令.单线程好像是一个只有一个队长指挥的小队,整个小队同一个时间只能执行一个任务. 单线程   在多线程情境下,计算机中有多个控制权.多个控制权可以同时进行,每个控制权依次执行一系列的指令.多线程好像是一个小队中的成员同时执行不同

mongodb-Mongodb在java中,多线程update时报错,请问是哪里出现的问题?

问题描述 Mongodb在java中,多线程update时报错,请问是哪里出现的问题? public class LocationPressureTest { private Todo todo; private int number; static Mongo mg = new Mongo("localhost", 27017); static DB db = mg.getDB("location_pressure_test_db"); static DBColl

字符串-java中String str1…的区别,详细见内容

问题描述 java中String str1-的区别,详细见内容 String str1,str2; str1 = "we are friends"; str2 = "we are friends"; 和 String str1 = "we are friends"; String str2 = "we are friends"; 在内存上的区别是什么? 是否有区别? 解决方案 没有区别,他们指向同一个对象 解决方案二: 就最后

java类的问题-关于java中的方法的区别

问题描述 关于java中的方法的区别 我是java菜鸟,想问一个问题关于 public static void main (String [] args){} 和static public void main (String [] args){} 的区别是什么?在jvm中是如何执行的? 解决方案 应该是没区别的吧 你要看区别 先分别编译后 后看看编译后的内容的区别吧 很多代码经过编译后效果是一样的