阻塞/非阻塞/同步/异步方法和多线程的关系?没有任何关系,俩不挨着

1.阻塞非阻塞异步同步是针对方法说的,是评判一个方法运行状态的。和多线程完全两个级别。

2.阻塞非阻塞异步同步是针对方法说的,是评判一个方法运行状态的。和多线程完全两个级别。

3.阻塞非阻塞异步同步是针对方法说的,是评判一个方法运行状态的。和多线程完全两个级别。

2.多线程只是能用来避免阻塞或者同步方法时的效率低问题

1.多线程和阻塞及非阻塞一点关系没有。并不是多线程就非阻塞了。
2.比如socket读取http request数据时,肯定是要多线程读取的,每个连接对应一个线程去读。因为传统的socket的accept(),send()这些方法是阻塞的,程序就会一直等。所以 
就要开启多线程保证程序能向下运行,但是每个线程内读取request时,线程内又是阻塞的。所以多线程和阻塞非阻塞没关系的。

3.多线程和非阻塞(异步)的关系?一点关系没有!即使一个线程也可以是非阻塞或者异步运行的

4.阻塞非阻塞异步同步是针对方法说的,是评判一个方法运行状态的。
3.所以通常在Java中处理阻塞I/O要用到线程(大量的线程)。代码如下
try
{

ServerSocket ss = new
ServerSocket(10000);

System.out.println("server start...");

while
(true) {

Socket s = ss.accept();

new
LogicThread(s);//开一个线程来处理请求,这里面调用InputStream.read()读取请求信息

}

 

} catch
(Exception e) {

e.printStackTrace();

}

}

}

4.可以分析创建服务器的每个具体步骤。首先创建ServerSocket,然后接受新的连接请求,在LogicThread中处理请求。
传统IO方式(阻塞I/O)在调用InputStream.read()/buffer.readLine()方法时是阻塞的,它会一直等到数据到来或缓冲区已满时或超时时才会返回,并且产生了大量String类型 
垃圾,尽管可以使用StringBuffer优化;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会启动一个线 
程去处理该客户端的请求。并且多线程处理多个连接。每个线程拥有自己的栈空间并且占用一些 CPU 时间。每个线程遇到外部未准备好的时候,都会阻塞掉。阻塞的结果就是会 
带来大量的进程上下文切换。且大部分进程上下文切换可能是无意义的。比如假设一个线程监听某一个端口,一天只会有几次请求进来,但是该 cpu 不得不为该线程不断做上下 
文切换尝试,大部分的切换以阻塞告终。

5.非阻塞式I/O(NIO):也可以说成“New I/O” 
核心类: 
1.Buffer 为所有的原始类型提供 (Buffer) 缓存支持。 
2.Charset 字符集编码解码解决方案 
3.Channel 一个新的原始 I/O 抽象,用于读写Buffer类型,通道可以认为是一种连接,可以是到特定设备,程序或者是网络的连接。通道的类等级结构图如下


10.4.Selector 
在过去的阻塞I/O中,我们一般知道什么时候可以向stream中读或写,因为方法调用直到stream准备好时返回。但是使用非阻塞通道,我们需要一些方法来知道什zid

转载于:https://www.cnblogs.com/panxuejun/p/6480596.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql备份 where_MySQL备份与还原

1.mysqldumpmysqlbinlog介绍mysqldump备份结合binlog日志恢复。MySQL备份一般采取全库备份加日志备份的方式,例如每天执行一次全备份,每小时执行一次二进制日志备份,这样在MySQL故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志…

JMeter:负载测试关系数据库

Apache JMeter是完全使用Java编写的性能测试工具。 可以在请求/响应模型上运行的任何应用程序都可以使用JMeter进行负载测试。 关系数据库也不例外:接收sql查询,执行它们并返回执行结果。 我将向您展示使用JMeter的图形用户界面设置测试方案有多么容易。…

new: Set up a window

Nehe的教程确实太老了,不过我认为它也能够让我了解OpenGL3.2以前的管线渲染模式,即使它在现在已经不常见了。因为想要了解,所以我还是会看完Nehe的教程。 现在这是一个新的教程 - JoeyDeVries的教程,可以说是网上最好的OpenGL教程…

Python全栈开发:socket

Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”&…

oracle sga pga mysql_修改Oracle数据库SGA和PGA大小

SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库。SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间。1、以dba身份登录并查看SGA信息:SQL>show parameter sga;查看PGA信息:SQL&…

NetBeans 7.1:创建自定义提示

我已经在帖子中介绍了一些我最喜欢的NetBeans提示 ,这些信息是用于使Java代码现代化的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是,由于NetBeans 7.1使…

今年暑假不AC

Problem Description “今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“#$%^&*%...”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向…

qregexp括号匹配_转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题,比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码,通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询条件呢?电话的格式有如下几种:01088888888010 8…

具有Tron效果的JavaFX 2 Form

这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中,我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段: .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-field{-fx…

Spring注解Annotion详解

概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO…

CopyOnWrite容器

1.简介 1.CopyOnWrite是程序优化的策略,当共享的内容需要修改时,复制出去一份进行修改,然后将原来的引用指向修改完的 2.java并发包(java.util.concurrent)中CopyOnWriteArrayList和CopyOnWriteArraySet实现了这个并发容器 3.好处:因为写时是在复制的一份上操作,所以可以并发的…

Akka的字数统计MapReduce

在我与Akka的日常工作中,我最近写了一个字数映射表简化示例。 本示例实现了Map Reduce模型,该模型非常适合横向扩展设计方法。 流 客户端系统(FileReadActor)读取文本文件,并将每一行文本作为消息发送给ClientActor。…

mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

软件安装:装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功…

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数,顾名思义,可变参数就是传入参数是可变的。可以是任意个,以一个简单的数学编程为例,计算 sum a * a b * b .....z * z 函数定义可以如下: def getsum(num) :sum 0for n in num :sum su…

Struts2之环境配置

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势,…

mysql数据库备份shell_mysql数据库备份shell脚本分享

#!/bin/bash#2020年04月27日15:56:21#auto backup mysql db#by author www.cnbugs.com########################SQL_DB"$*"SQL_USR"backup"SQL_PWD"123456"SQL_CMD"/usr/bin/mysqldump"SQL_DIR"/data/backup/date %F"if [ $…

懒惰的JSF Primefaces数据表分页–第1部分

今天,我们将使用带有视图范围的托管bean的惰性列表进行JSF数据表分页。 这些单词/表达式是什么意思? 如今,有几个JSF框架为数据表提供现成的分页,列排序器和其他功能。 今天,我们将使用Primefaces数据表。 通常&#…

java 动态增加定时任务

直接上代码 import org.apache.tools.ant.util.DateUtils; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar; import…

基于JavaFX的SimpleDateFormat演示程序

对于使用Java Date进行格式化的新手甚至对于使用Java Date进行格式化的有经验的Java开发人员而言,可能有些棘手的事情是使用SimpleDateFormat规范日期/时间格式。 SimpleDateFormat的基于类级别的Javadoc的文档非常详尽,涵盖了表示日期/时间的各个组成部…

mysql中预定义常量_PHP预定义常量

这些常量在 PHP 的内核中定义。它包含 PHP、Zend 引擎和 SAPI 模块。PHP_VERSION (string)PHP_OS (string)PHP_EOL (string)自 PHP 4.3.10 和 PHP 5.0.2 起可用PHP_INT_MAX (integer)自 PHP 4.4.0 和 PHP 5.0.5 起可用PHP_INT_SIZE (integer)自 PHP 4.4.0 和 PHP 5.0.5 起可用D…