关于java多线程和处理并发的问题
关于java多线程和处理并发,我一直理解有点混,所以向大神们请教。
首先,关于多线程,我一直的理解是,客户端向服务器发起请求时,要运行服务器某个方法,那么服务器会开启一个客户端线程,然后呢,多线程只会在同一个客户端内部起作用,比如有两个客户端,同时要运行服务器端的这个方法,那么所谓的多线程之间的互斥锁和同步锁只会在同一客户端请求内部起作用,而两个客户端之间的线程是没法关联的,也就是相当于两个客户端相当于开启两个副本,这两个副本互不干扰,我想问一下我理解的是不是有问题?
第二,如果真的如我理解,多线程只能在同一客户端程序或同一服务器请求实现多线程同步,互斥等锁,那以java web为例,如果用户量较大,那常常会出现多个用户请求要运行同一个服务端方法,而且会修改同一个数据资源,这样可能就会出问题,那如何去避免java web中这样多个客户端同时请求修改同一个数据时出现数据错误呢?这应该也是所谓的并发问题吧?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先多线程的互斥,只是针对需要互斥访问的资源,比如连接的是同一个数据库;数据库自己实现多线程的互斥;
所以对于多服务端访问外部资源,锁机制应该由外部实现
客户端并不运行服务器端的方法,最多是导致服务器进程运行某个方法。你对进程,机器这些边界的理解可能有问题。
一: 一进程内的各线程是共享内存 (和同样的对象堆) 的,并不是无法关联。
有可能你的一个线程没有和其他线程共用同个对象或同个锁,这样的没有关联仅是偶然,不是线程的本质属性。
二: 加锁