2 iwantadream iwantadream 于 2017.01.08 17:43 提问

JAVA线程/并发/请求的关系是怎么样的

多线程是不是 只是指通过new Runnable()再创建个线程 去干其它事情?
那我的项目里没有创建过其它线程是不是就是单线程环境?
类似 秒抢 的环境下,同时几个用户点击秒抢, 要实现互斥同步,需不需要用synchronized ()把关键代码括起来,这几个用户同时发出的请求是一个线程依序执行的吗?如果是那不就不需要用synchronized ()实现互斥同步吗?这几个概念有点模糊 混淆,请多指教 或者 推荐一些关于理清这方面的书籍或文章给我,谢谢

2个回答

a648422720
a648422720   2017.01.08 18:02
已采纳

如果你有用过socket就知道,很多用户同时发出请求,在一个时间点服务器只能处理一个用户的请求,如果你没有采用多线程的话,那么服务器只有处理完
当前用户的请求之后,才能处理下一个用户的请你。如果用了多线程,那么下个用户请求时就不用等到上个用户处理完再处理,而是可能某个时间点会切换到
当前用户的请求处理。如果多线程之间没有数据共享,那么可以不用synchronized。你可以去找些专门讲java多线程并发的书籍看看。

iwantadream
iwantadream 回复Lu_YuanWei: 谢谢
一年多之前 回复
a648422720
a648422720 回复iwantadream:是啊
一年多之前 回复
iwantadream
iwantadream 很多用户同时发出请求,那如果没有用Thread或者Runnable()的话,其实也是单线程吧?
一年多之前 回复
u012976158
u012976158   2017.01.09 10:52

单线程和多线程的区别是在于 你每次是否操作同一个线程 如果是多线程 那么你读代码就会明白 每次 操作的是重新创建的线程
保证线程安全 有三种方式: 第一种 用ThreadLocal 定义变量 , 第二种 用同步锁 也就是你说的synchronized , 还有一种springmvc 和spring整合做项目的时候,注解的开发方式,就是使用局部变量,随着方法的消失而消失

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
线程与并发:(一)高并发和多线程的关系
“高并发和多线程”总是被一起提起,给人感觉两者好像相等,实则 高并发 ≠ 多线程   多线程是完成任务的一种方法,高并发是系统运行的一种状态,通过多线程有助于系统承受高并发状态的实现。    高并发是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况
Java多线程--并发和并行的区别
所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。     并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行
Java Web并发访问的线程安全问题
多线程环境下如果访问单例对象,当对象内部有类变量或实例变量时,就可能存在安全性问题。 解决方法: 1.对操作共享变量的所用方法进行同步控制; 2.同步共享变量,例如Collections.synchronizedMap()可以同步共享的Map。 3.使用同步对象,例如ConcurrentMap、AtomicInteger等对象都是线程安全的,使用AtomicInteger可以统计系统的并发量。
HttpClient多线程并发问题
这篇文章概括了怎样在多线程环境下安全的使用HttpClient。 建立连接 在HttpClient中使用多线程的一个主要原因是可以一次执行多个方法。在执行期间,每一个方法都使用一个HttpConnection实例。由于在同一时间多个连接只能安全地用于单一线程和方法和有限的资源,我们就必须确保连接分配给正确的方法。而MultiThreadedHttpConnectionManager完全可以
http并发,操作系统如何识别对应的进程,线程请求
系统识别哪一个进程中的哪一个线程发送的http请求,这个是由网络协议中的四元组(目的端口,ip和源端口,ip).线程都是向web服务器80 端口发送请求,但是源端口的分配是由系统自动分配,一旦分配成功之后,就会三次握手(基于tcp协议),建立网络通道。那么其他线程只能等待这个请求数据接收成功之后,再次请求建立网络连接。换句话说同一时间只能有一个线程对外建立网络连接。知道接收的数据包,结束之后,才会
java模拟并发请求测试方法是否线程安全
java模拟并发请求测试方法是否线程安全
Java并发:线程池详解(ThreadPoolExecutor)
前言现在在实现异步时,基本都是使用线程池来实现,线程池在工作应用的还是比较频繁的,本文将就线程池的使用、相关原理和主要方法源码进行深入讲解学习。线程池的基本使用package com.joonwhee.concurrent; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callabl...
java并发与多线程API学习
Executor接口 public interface Executor {      void execute(Runnable command); } Executor接口中之定义了一个方法execute(Runnable command),该方法接收一个Runable实例,它用来执行一个任务,任务即一个实现了Runnable接口的类。     在Jav
(java多线程并发)控制并发线程数的Semaphore
1.简介    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。 2.概念     Semaphore分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。 以一个停车场运作为例。为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人
Java并发(一)-- 线程安全(从“线程不安全”说起)
来聊一聊Java并发中的“线程安全”问题