Java代码编程实现模拟机器人对话
前言
今天带大家来体验一下Java多线程,首先我们要明白什么是线程?什么是多线程?
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
线程是指进程中的一个执行流程,一个进程可以运行多个线程。比如java.exe进程可以运行很多线程。线程总是输入某个进程,进程中的多个线程共享进程的内存。
多线程指的是这个程序(一个进程)运行时产生了不止一个线程。
目录
一、Java多线程的介绍
我们知道,Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。
一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进 程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出 。
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。
多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
线程是一个动态执行的过程,它也有一个从产生到死亡的过程。
下图显示了一个线程完整的生命周期:
二、创建线程并运行
接下来,我们使用Thread创建一个线程并运行:
1.打开Idea新建工程,再右击src新建包Thread,在包上点右键,创建一个PeopleA类,输入代码:
2.再右击Thread包创建一个ThreadTest类,并输入代码:
3.运行,查看结果,体会多线程的执行:
主线程启动子线程后,会继续执行后续代码,不会关心子线程什么时候执行。
这里还需注意,主线程的代码执行完毕后,整个程序并没有立即结束运行,而是等待子线程运行完后再结束运行并回收资源。
三、多线程间的交互
①模拟两个机器人的对话
1.我们右击src,新建一个包com.my.thread,并右击创建名为Language的对象,用来存储问题和答案,用于2个机器人的交互。代码如下:
2. 在com.my.thread包上创建名为PeopleA的对象,用来模拟提问者。代码如下:
3. 在com.my.thread包上创建名为PeopleB的对象,用来模拟回答者。代码如下:
4.创建ThreadTest对象的main函数,启动2个线程,观察运行结果(每次结果可能都不一样):
5.运行ThreadTest.java,观察结果,体会多线程的工作原理。
多线程的使用注意事项:有效利用多线程的关键是理解程序是并发执行而不是串行执行的。
例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程。通过对多线程的使用,可以编写出非常高效的程序。
请注意,如果你创建太多的线程,程序执行的效率实际上是降低了,而不是提升了。请记住,上下文的切换开销也很重要,如果你创建了太多的线程,CPU 花费在上下文的切换的时间将多于执行程序的时间!
- 点赞
- 收藏
- 关注作者
评论(0)