JAVA多线程入门(一):理解多线程

我曾经以为多线程的作用是这样的——你运算1+1=2需要1秒,如果用了两个线程,那么1+1=2只要算0.5s。但是实际上并不是如此。

我认为,多线程解决的是程序等待的问题。

想象这样一个使用环境。如果你写了一个串口通信程序,只有mian函数,但是同时要做收和发两件事,你应该如何处理?按照单片机的思路,放中断啊。但是如果没有中断呢?那就是查询。什么是查询呢?就是:

while(1){

send()

rev();

}

这么写的话对实时性会有很大影响。为了解决这个问题,那我就想了,如果有两个主函数多好啊?两个主函数,然后一个运行send(),一个运行rev()。基于此,下一个解决方案就出来了:

Send.class,Rev.class。

写两个类,两个mian函数就不行了么?

但是问题又来了,如果我想实现一个功能“发送刚刚接收到的信息”,那我必须让Send.class和Rev.class通信,但是它们却分属两个不同的程序。

那有没有一种方式,可以在一个程序里,有多个main()呢?有,就是多线程。

P.S.“同时”不一定是真“同时”,CPU通过分时间片来完成多线程,切换速度太快,从而营造出两个线程同时运行的假象,但是本质上还是单一线程在运行的。所以我说,多线程解决的是程序中等待的问题,从顺序执行,变成了并行。但是因为实质上在CPU层面还是单一线程运行,只不过用了“切换”这个小把戏,因此不能像本文刚开头说的那样,0.5s解决1+1=2的问题。

总结一下:线程相当于在一个程序中有多个main()函数。

下面说一说进程和线程的区别:

总结:进程由操作系统控制,用来分配资源(内存),具有独立的代码和数据空间。线程可以由程序员创建,同一程序的线程间共享内存,代码,程序等资源,这就是我说的,如果想实现“发送刚刚接受到的消息”,如果用多线程就很容易完成。因为他们使用的是同一个内存。可能有的小伙伴对内存还不太理解,那我这么说吧,你的数组,变量,都在内存里,多线程共享内存的意思就是,A线程可以用B线程的变量。当然,由此就引出了多线程一个很观念的概念,锁。这很重要,之后单独说吧。

猜你喜欢

转载自blog.csdn.net/w8253497062015/article/details/82558964