专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

java并发编程-学习方法、进程和线程的区别

ins518 2024-11-01 13:22:55 技术文章 11 ℃ 0 评论

java并发编程是通向高级编程的桥梁,如你想学习Tomcat的内部原理、spring cloud微服务、锁问题等都需要先了解并发的。所以把Java并发打好基础,是为了后面更加高级课程的学习。

如何学习java并发编程?

我学习java并发编程是反复迭代的过程。大概的说下我怎么做的,首先oracle官网并发的基本概念、例题做一遍。然后进行think in java 并发章节->代码模拟,自己写一遍 。再每隔3个月重复学一遍think in java 并发章节和示例代码。通过几次的迭代和工作的积累后,可以看看《并发编程》、《effective java》这两本书的相关章节。并发编程博大精深,涉及操作系统、编译原理、数据结构,想要学好很难,各位一起努力啊。

什么是并发?

计算机用户希望可以在一个时间点做更多的事情。其实操作系统层面已经对并发做了支持,比如同一个时间可以听音乐、下载文件、玩游戏。我们现在知道CPU有一个时间切片,在同一时间只从内存同步一条指令到CPU运行,只是由于CPU有多核而且执行速度特别特别快,我们肉眼无法感知,所以你会感觉CPU是同一时间执行所有的任务。由于我们的应用程序不能随意的调用操作系统的并发类库,所以oracle Java 平台提供了低级别和高级别的并发支持。

进程和线程

在并发编程中,有两个基本的概念我们先要先了解,就是进程和线程。我们在Java中,并发程序使用的是线程(Thread)。当然,进程也非常的重要。计算机系统由很多个进程和线程组成。即使是单核处理器,也是如此。在单核处理器中,其根据操作系统的时间切片,在进程和进程间共享单个核的处理时间。

进程

进程有自己的执行环境。实际上就是每个进程占用着它自己的内存空间。我们将application或你自己写的程序叫做进程,进程间需要交流,通过操作系统提供的inter Process communication(IPC)资源进行写作,列入管道(pipe)或者socket。IPC不仅可以在同一个系统中进行交流,还可以再不同的系统中。

线程

线程是低级别的进程。创建线程需要的资源相对于进程系统开销要小的多。进程中含有多个线程,最少要有一个线程,如果没有JVM会退出,程序会终止。比如看下面程序终止的例子,你没看懂也没事,后面会再说。

public class ThreadDaemon implements Runnable {
@Override
public void run() {
while(true){
try {
System.out.println("i am alive !!!");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread thread = new Thread(new ThreadDaemon());
thread.setDaemon(true); //,在启动start()方法前,告诉程序都是守护线程,jvm 退出
thread.start();
}
}

输出结果:

输出结果会发现,子线程设置为守护进程,然后主线程(main)线程执行完了,这个时候子线程没有等5秒,执行完打印语句(I am alive !!!)程序就退出了。

最后一点,我们要清楚,因为一个进程会有多个线程,所以多个线程会共享进程的资源。线程之间是隔离的,独立的,所以线程间的交互是个问题,我们后面将会学习volatile关键字,synchronized关键字,这个就是强制线程间同步。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表