我的理解是:tomcat 服务器采用非阻塞机制,对于每一次网络访问请求都是开一个新的线程进行处理,当有多个请求访问相同的资源的时候是不是就已经涉及到了多线程的内容?是不是就要考虑线程安全等的问题?还是说servlet容器已经把这些问题处理好了,不用过多的担心?(ps:c币不多,请各位大神见谅。)
无可质疑,当然涉及到了,就比如hibernate中的数据库事物控制,为什么要控制,不就是要保证数据的时实准确性,保证二级缓存中的数据可以和数据中的数据
保持一致,事物控制就是解决多线程并发问题,解决资源唯一性,还有spring中的事物控制也是如此啊,反正涉及到数据库的一般框架都有多线程的处理事物,要不然谁能保证我的到的数据是真的,你去银行查账单当然要看到最新的数据。
如果你访问的是类的静态变量,或者操作系统的线程不安全的例程,你还是需要同步。但是一般jsp页面上的对象,都是实例变量,java类库大部分的调用也是线程安全的,那就没关系。
同步需要锁机制和线程阻塞
必须涉及到;
在不同用户同时进行同样的操作时,既要保证效率,又要保证数据的正确性,这就要用到多线程;
例如 多窗口售票
必须涉及到;并发访问中线程不安全的变量、数据的不致性问题,都需要用到多线程的锁与线程的同步
当变量是局部变量的时候就不存在安全隐患,当变量需要多线程共享的时候,才会考虑安全隐患,线程同步,多线程通信,所以加入有10个线程,我每个线程里面都写个for(int i=0;i<100;i++) System.out.println(i);那么这时候各个线程之间的i相会不影响,本身就保证原子性,再比如,抢票,票数是一定的,所以票数一定是要共享的,这时候,就必须进行加锁操作,保证变量的原子性,另外,我们对数据的操作一定要让别的线程知道我对数据操作了,所以要保证可见性,即某一线程对数据进行操作对另外一个线程是可见的