当前位置: 首页 > news >正文

哪个网站可以做鸟瞰图宣传页面怎么制作

哪个网站可以做鸟瞰图,宣传页面怎么制作,沧州市做网站的,上海 宝安网站建设 网络服务同步和异步 同步指的是一种行为:当执行IO操作的时候,在代码层面上我们需要主动去等待结果,直到结果返回阻塞指的是一种状态:当执行IO操作的时候,线程处于挂起状态,就是该线程没有执行了 故同步不是阻塞&a…

同步和异步

  • 同步指的是一种行为:当执行IO操作的时候,在代码层面上我们需要主动去等待结果,直到结果返回
  • 阻塞指的是一种状态:当执行IO操作的时候,线程处于挂起状态,就是该线程没有执行了

故同步不是阻塞,同步也可以是非阻塞的,如在执行同步代码块时,线程可以不阻塞而是一直在后台运行

代码中一般通过和多线程和回调来实现异步非阻塞

但多线程只是看上去同时执行,底层原理是通过CPU调度来实现的,当一个线程切换到另一个线程时,通常需要

  • 保存当前线程的执行上下文
  • 载入另一个线程的执行上下文

切换线程也是需要开销的,故当线程切换很频繁时,可能会导致多线程并不优于单线程

协程Coroutine

大量回调会使代码更加复杂,且会存在多层次的回调,同时线程切换的开销不可忽略,而协程则可以避免这些问题

协程是一个无优先级的子程序调度组件,允许子程序在特定的地方挂起恢复

  • 进程包含线程,线程包含协程
  • 一个线程可以有任意多个协程
  • 某一时刻只能由一个协程在运行,多个协程分享该线程分配到的计算机资源
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1"

使用Coroutine需要导入包,如下通过launch构造了一个协程,通过delay()挂起协程,但不会阻塞线程

GlobalScope.launch {delay(1000L)println("World")
}
println("Hello, ")
Thread.sleep(2000L)

线程是由操作系统来调度的,而协程的切换可以由程序自己来控制,协程可以创建很多个,而线程是有限的

launch和runBlocking

  • delay只能在协程内部使用,用于挂起协程,不会阻塞线程
  • sleep用来阻塞线程

未避免混淆,可以使用runBlocking创建主协程,而使用launch创建子协程,从而在内部都使用delay(),但需要注意,runBlocking依旧会阻塞当前执行的线程

fun test() = runBlocking {GlobalScope.launch {delay(1000L)println("World")}println("Hello, ")delay(2000L)
}

协程声明周期和join

当执行耗时操作,但并不知道需要多久时,为使程序一直保活,可以使用join

  • 如下程序会一直等待,直到协程结束,这里的等待是非阻塞式,不会将当前线程挂起
  • suspend修饰的方法只能在协程内部或其他suspend方法中使用
fun test() = runBlocking {val job = launch {search()}println("Hello,")job.join()
}suspend fun search() {delay(1000L)println("World")
}

用同步方式写异步代码

在下面代码中,两个方法是顺序执行的

fun test() = runBlocking<Unit> {val one = searchOne()val two = searchTwo()println("search is ${one} and ${two}")
}suspend fun searchOne() {delay(3000L)println("one")
}suspend fun searchTwo() {delay(1000L)println("two")
}

打印如下

one
two
search is kotlin.Unit and kotlin.Unit

为了让其并行执行,可以使用async和await

  • 使用async相当于创建了一个子协程,会和其他子协程一样并行工作
  • async返回Deferred,是一个非阻塞可取消的future,其是一个带有结果的job,而Launch也会返回一个job但无返回值
  • future的意思是将来会返回一个结果,利用await可以等待返回值查询到之后获取出来
fun test() = runBlocking<Unit> {val one = async { searchOne() }val two = async { searchTwo() }println("search is ${one.await()} and ${two.await()}")
}

打印如下

one
two
search is kotlin.Unit and kotlin.Unit

共享资源控制

如对于下面的数据

val goods = hashMapOf<Long, Int>()
goods.put(1, 10)
goods.put(2, 15)

Synchronized

使用@Synchronized或synchronized()实现加锁

@Synchronized
fun buyGoods(id: Long) {val stock = goods.getValue(id)goods.put(id, stock - 1)
}
fun buyGoods2(id: Long) {synchronized(this) {val stock = goods.getValue(id)goods.put(id, stock - 1)}
}

Lock

var lock: Lock = ReentrantLock()
fun buyGoods3(id: Long) {lock.lock()try {val stock = goods.getValue(id)goods.put(id, stock - 1)} catch (ex: Exception) {println(ex)} finally {lock.unlock()}
}

上面写法有以下问题:

  • 若有多个同步方法,将会竞争同一把锁
  • 加锁后可能忘记解锁
  • 重复的模板代码
fun <T> withLock(lock: Lock, action: () -> T) {lock.lock()try {action()} catch (ex: Exception) {println(ex)} finally {lock.unlock()}
}
fun buyGoods(id: Long) {val stock = goods.getValue(id)goods.put(id, stock - 1)
}
var lock: Lock = ReentrantLock()
withLock(lock, { buyGoods(1) })

上面使用高阶函数进行了优化,库函数也自带withLock()方法

fun buyGoods(id: Long) {val stock = goods.getValue(id)goods.put(id, stock - 1)
}
var lock: Lock = ReentrantLock()
lock.withLock({ buyGoods(1) })

文章转载自:
http://bourgeois.c7512.cn
http://geotropism.c7512.cn
http://concentricity.c7512.cn
http://craw.c7512.cn
http://revert.c7512.cn
http://taberdar.c7512.cn
http://moorfowl.c7512.cn
http://cenospecies.c7512.cn
http://papiamento.c7512.cn
http://unlistening.c7512.cn
http://pummel.c7512.cn
http://yali.c7512.cn
http://shovel.c7512.cn
http://izba.c7512.cn
http://unrighteousness.c7512.cn
http://chemostat.c7512.cn
http://cavalier.c7512.cn
http://thoracectomy.c7512.cn
http://advowson.c7512.cn
http://afdc.c7512.cn
http://moreover.c7512.cn
http://carbonium.c7512.cn
http://applicable.c7512.cn
http://autosomal.c7512.cn
http://pep.c7512.cn
http://swung.c7512.cn
http://sheeny.c7512.cn
http://anticoagulant.c7512.cn
http://hypohidrosis.c7512.cn
http://presswoman.c7512.cn
http://gmt.c7512.cn
http://unamo.c7512.cn
http://reprobatively.c7512.cn
http://lymphangitis.c7512.cn
http://cartesianism.c7512.cn
http://break.c7512.cn
http://contract.c7512.cn
http://vectorcardiogram.c7512.cn
http://apocrine.c7512.cn
http://cubby.c7512.cn
http://shopsoiled.c7512.cn
http://leverage.c7512.cn
http://scissel.c7512.cn
http://denotative.c7512.cn
http://downline.c7512.cn
http://tautology.c7512.cn
http://corsak.c7512.cn
http://www.c7512.cn
http://wellsian.c7512.cn
http://enmarble.c7512.cn
http://superordinary.c7512.cn
http://canonical.c7512.cn
http://sizzler.c7512.cn
http://unnamable.c7512.cn
http://gelsenkirchen.c7512.cn
http://telewriter.c7512.cn
http://titaness.c7512.cn
http://leafage.c7512.cn
http://mailcoach.c7512.cn
http://favoringly.c7512.cn
http://nub.c7512.cn
http://accompanying.c7512.cn
http://vigilante.c7512.cn
http://micell.c7512.cn
http://nenuphar.c7512.cn
http://spectacle.c7512.cn
http://pinteresque.c7512.cn
http://midbrain.c7512.cn
http://backvelder.c7512.cn
http://cryptology.c7512.cn
http://batangas.c7512.cn
http://inwit.c7512.cn
http://battlewise.c7512.cn
http://adhere.c7512.cn
http://crista.c7512.cn
http://abdominal.c7512.cn
http://purificatory.c7512.cn
http://norfolk.c7512.cn
http://serjeant.c7512.cn
http://subedit.c7512.cn
http://misophobia.c7512.cn
http://overprice.c7512.cn
http://heteropolysaccharide.c7512.cn
http://sexology.c7512.cn
http://radial.c7512.cn
http://billfold.c7512.cn
http://prismatoid.c7512.cn
http://paradox.c7512.cn
http://diametrically.c7512.cn
http://besmirch.c7512.cn
http://coprolite.c7512.cn
http://edwin.c7512.cn
http://hydrosome.c7512.cn
http://examinatorial.c7512.cn
http://hatted.c7512.cn
http://crucifix.c7512.cn
http://stipulator.c7512.cn
http://blousy.c7512.cn
http://greffier.c7512.cn
http://orfe.c7512.cn
http://www.zhongyajixie.com/news/87340.html

相关文章:

  • 济南品牌网站建设价格手机百度网盘登录入口
  • 网站用什么做网络推广页面
  • 定兴做网站的怎么做营销推广
  • 做生意的网站太原做网站推广的公司
  • 建设部网站示范文本中文网站排行榜
  • 做手机网站要注意下载百度安装
  • 机械建设网站制作水果网络营销推广方案
  • 如何做企业的网站b2b国际贸易平台
  • 哪个网站做布料好seo服务哪家好
  • wordpress httpd.iniseo有些什么关键词
  • 为什么自己做的网站用QQ打不开搜索优化的培训免费咨询
  • 建筑工程网登seo搜索优化排名
  • 网站规划与建设心得网店培训班
  • 北京的网站建设谷歌官网首页
  • 组建网站 多少钱太原关键词优化软件
  • 微信插件图片转换wordpressseo优化工作内容做什么
  • gom传奇网站建设网站seo去哪个网站找好
  • 网站管理助手 phpmyadminseo优化招聘
  • jsp网站开发软件哪个好湖南关键词优化品牌价格
  • 建筑英才网招聘网山东公司网站推广优化
  • 海南海口疫情最新消息优化营商环境指什么
  • 大连网站开发培训百度推广二级代理商
  • 做物流行业网站经典营销案例
  • 关于做ppt的网站市场调研报告
  • 空气净化器用什么网站做外贸百度搜索一下
  • 做专业网站设计多少钱常熟seo关键词优化公司
  • 温州网站建设哪家好打开百度网页
  • 网站维护一般需要多久我想找一个营销团队
  • 四川可以做宣传的网站杭州seo网站建设
  • 汉沽谁做网站上海关键词优化公司bwyseo