一:线程概念
线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程
一个进程至少包含一个线程,如果一个进程包含2个以上,表示该进程是多线程操作,那就存在资源共享的问题,多线程争夺资源的问题,所以才有了锁机制的存在,防止多个线程打架
二:多线程的作用
1.为什么会有多线程:
1)由于早起的操作系统dos里,一个进程只有一个线程,随着机器的发展,发现一个进程如果存在多个线程来处理,这将大大利用期cup,让cup充分利用,也可以让一个进程的程序让多个线程来跑,这将大大加快代码的执行时间。
2)实际上多线程的工作方式:表面上一个进程包含多个线程,代码由多个线程同时进行,但实际到了cup那里,cpu的调度不会出现多个同时调度,实际到了cup还是单个调度,只是中间有个时间间隔,这个时间间隔来调用不同的线程,eg:10ms执行这个线程,然后执行别的线程,最后回来又重新执行现在的线程,通过时间差来保证多线程的工作,由于时间间隔非常短,所以我们感觉多线程是并发进行的,这才有了多线程跑期来远比单线程快很多的道理。
3)多线程带来的困扰:上面都说了很多好处,那他有没有坏处呢,答案是肯定的,有坏处,多线程共享一个进程的资源(主要还是内存的资源),资源的分配怎么保证大家都能共享,这是第一个问题;第二个问题:如果程序里存在读写并存的情况,很有可能我的写和读也是并行的,这样就会出现数据的误差,所以想了个办法,这样的情况,我把代码加个锁,只有保证我数据写完了,我才把锁交出来,一个时间段里,我只有一把锁来维持,用完了再交给别人,防止数据的读和写被同时修改的可能。
4)多线程应该注意的地方:只有你充分理解了多线程在jvm里的工作方式,你才可以大胆的使用它的好处,否则,还是谨慎一点,别丢了西瓜捡了芝麻。
线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程
一个进程至少包含一个线程,如果一个进程包含2个以上,表示该进程是多线程操作,那就存在资源共享的问题,多线程争夺资源的问题,所以才有了锁机制的存在,防止多个线程打架
二:多线程的作用
1.为什么会有多线程:
1)由于早起的操作系统dos里,一个进程只有一个线程,随着机器的发展,发现一个进程如果存在多个线程来处理,这将大大利用期cup,让cup充分利用,也可以让一个进程的程序让多个线程来跑,这将大大加快代码的执行时间。
2)实际上多线程的工作方式:表面上一个进程包含多个线程,代码由多个线程同时进行,但实际到了cup那里,cpu的调度不会出现多个同时调度,实际到了cup还是单个调度,只是中间有个时间间隔,这个时间间隔来调用不同的线程,eg:10ms执行这个线程,然后执行别的线程,最后回来又重新执行现在的线程,通过时间差来保证多线程的工作,由于时间间隔非常短,所以我们感觉多线程是并发进行的,这才有了多线程跑期来远比单线程快很多的道理。
3)多线程带来的困扰:上面都说了很多好处,那他有没有坏处呢,答案是肯定的,有坏处,多线程共享一个进程的资源(主要还是内存的资源),资源的分配怎么保证大家都能共享,这是第一个问题;第二个问题:如果程序里存在读写并存的情况,很有可能我的写和读也是并行的,这样就会出现数据的误差,所以想了个办法,这样的情况,我把代码加个锁,只有保证我数据写完了,我才把锁交出来,一个时间段里,我只有一把锁来维持,用完了再交给别人,防止数据的读和写被同时修改的可能。
4)多线程应该注意的地方:只有你充分理解了多线程在jvm里的工作方式,你才可以大胆的使用它的好处,否则,还是谨慎一点,别丢了西瓜捡了芝麻。