浅谈java多线程(一)

在我们学习java的线程时首先我们来了解两个两个概念:1.什么是进程  2.什么是线程

1.进程:程序是指令和数据的有序集合,它本身没有任何运行的含义,是个静态的概念而我们所说的进程是程序在处理机上的一次执行过程,它是一个动态的概念,他是一个具有独立的功能的程序,是一个实体,每一个进程都有自己的地址空间,简单来说,我们在计算机上打开一个我们编程用的eclipse编译软件,或者打开一个音乐播放器就是一个进程,进程在执行过程中由于CPU资源有限会有间断性,所以导致进程有3种状态:

1:就绪状态 :当进程已分配到除CPU以外的所有必要资源后,只要在获得CPU,便可立即执行,进程这时的状态就称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列。

2:运行状态 :进程已获得CPU,其程序正在执行。在单核CPU中,只有一个进程处于执行状态;再多核CPU中,则有多个进程处于执行状态

3:阻塞状态:正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即程序的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。

下图是进程三种状态之间的关系

 2.线程:线程实际上是在进程的基础上进一步划分,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。在一个进程启动后,进程中的若干个程序功能可划分为若干个线程,线程是进程的一个执行路径,同一个进程中的线程共享一个内存空间和进程中的所有资源,线程之间可以自由切换,并发执行,一个进程至少有一个线程(单线程程序),一个程序可以同时执行多个任务,用来提高效率如:通信中的同时多人聊天等。

接着我再另外介绍两个概念:3.并行 和 4.并发

3:什么是并行:并行是指在多核CPU中多个任务同时运行,例:吃饭的时候可以边吃饭边打电话,这两件事情可以同时执行,

4:什么是并发:是指两个或者多个任务同时请求执行,而处理器一次只能接受一个任务,就会把任务安排轮流交替执行,由于CPU时间片运行时间短,所以我们就有一种错觉就是感觉任务在同时执行,并发就如同我们:吃完饭->喝水 喝完水->睡觉 一觉醒来->吃饭......这么个过程

说了这么多了,我们开始进入线程:在java中创建一个线程有两种方式:

1:继承Thread类 ,执行run方法  然后通过当前类的对象用start()方法启动线程

2:实现Runnable接口:重写里面的run()方法,然后把当前类的对象作为一个事物传入Thread中最后通过Thread的对象调用start()方法启动。

下面我简单地运用这两个方式:继承Thread类的方式的测试代码如下

public class DamoThread extends Thread{
	
	
	public void run() {
		for(int i=0;i<20;i++){
			System.out.println("i的值="+i);
			
		};
		
	}
	
	
	public static void main(String[] args) {
		DamoThread d=new DamoThread();
		d.start();//启动线程

	}

}

实现Runnable接口的方式:

public class DamoRunnabale implements Runnable {
	public void run() {
		for (int i = 0; i <20; i++) {
			System.out.println("i的值="+i);
			
		}
		
	}

	
	public static void main(String[] args) {
		DamoRunnabale dr=new DamoRunnabale();
		Thread t1=new Thread(dr);
		t1.start();//启动线程
	}

}

讲完线程的实现方式接着我们来讲讲线程的休眠:

5:线程的休眠;线程的休眠我们是通过调用Thread类中的一个sleep()的方法实现的在java的API中Thread类有一个public static void sleep(long millis)方法,throws interruptdeException使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),释放CPU的时间片,具体取决于系统定时器和调度程序的精度和准确性,线程不会丢失任何显示器的的所有权(对象锁不会释放),介绍两个异常:IllegalArgumentException---如果millis为负数会报的异常,nterruptdeException--如果任何线程中断当前线程,当抛出这个异常时,当前线程的中断状态会被清除。下面我们用程序来简单测试一下线程的休眠,我们在之前的基础上加一个sleep()方法,代码如下

public class DamoRunnabale implements Runnable {
	public void run() {
		for (int i = 0; i <20; i++) {
			
			
			
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
			System.out.println("i的值="+i);
			
		}
		
	}

	
	public static void main(String[] args) {
		DamoRunnabale dr=new DamoRunnabale();
		Thread t1=new Thread(dr);
		t1.start();//启动线程
	}

}

先讲到这里,下一篇我们将和大家交流一下线程的中断,线程的同步和线程安全,欢迎各位大佬指点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值