返回值

Java回顾之多线程同步

这一生的挚爱 提交于 2020-03-29 12:48:23
在这篇文章里,我们关注线程同步的话题。这是比多线程更复杂,稍不留意,我们就会“掉到坑里”,而且和单线程程序不同,多线程的错误是否每次都出现,也是不固定的,这给调试也带来了很大的挑战。   在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的“线程池”,JDK为我们提供了一个很大的concurrent工具包,最后我们会对里面的内容进行探索。   为什么要线程同步?   说到线程同步,大部分情况下, 我们是在针对“ 单对象多线程 ”的情况进行讨论,一般会将其分成两部分,一部分是关于“共享变量”,一部分关于“执行步骤”。   共享变量   当我们在线程对象(Runnable)中定义了全局变量,run方法会修改该变量时,如果有多个线程同时使用该线程对象,那么就会造成全局变量的值被同时修改,造成错误。我们来看下面的代码: 1 class MyRunner implements Runnable 2 { 3 public int sum = 0; 4 5 public void run() 6 { 7 System.out.println(Thread.currentThread().getName() + " Start."); 8 for (int i = 1; i <= 100; i++) 9 {

多线程之旅(Thread)

倖福魔咒の 提交于 2020-03-29 07:53:30
在上篇文章中我们已经知道了多线程是什么了,那么它到底可以干嘛呢?这里特别声明一个前面的委托没看的同学可以到上上上篇博文查看,因为多线程要经常使用到 委托 。 源码 一、异步、同步 1.同步(在计算的理解总是要你措不及防,同步当线程做完一件事情之后,才会执行后续动作),同步方法慢,只有一个线程执行,异步方法快,因为多个线程一起干活,但是两者并不是线性增长,当我们的异步线程占有的资源越来越多了,会导致资源可能不够,其次线程过多CPU也是需要管理成本的,所以不是越多越好。 2.异步(可以同时执行多个任务,在同样的时间,执行不同的任务),同步方法卡界面(UI),因为我们的主线程(UI)忙于计算造成了堵塞了。异步方法不卡界面,计算任务交给了子线程完成。winform中体现的玲玲精致。(你品,你细品),web 可以异步的处理一起其他的任务,比如给用户发邮箱(我们的BS结构的,每次访问都是一个子线程,当我们的代码写的比较糟糕,是不是加载比较慢呢哈哈)。异步多线程无序,执行的先后无序,执行的时间不确定,结束也不确定,所以我们很难通过执行时间和先后顺序控制,异步的执行顺序。 二、初识Thread 属性名称 说明 CurrentContext 获取线程正在其中执行的当前上下文。 CurrentThread 获取当前正在运行的线程。 ExecutionContext 获取一个

实例化问题

血红的双手。 提交于 2020-03-29 05:54:17
Object .Instantiate public static Object Instantiate( Object original); public static Object Instantiate( Object original, Vector3 position, Quaternion rotation); //实例化Prefab 例1: public GameObject prefab; void Start() { for (int i = 0; i < 10; i++) Instantiate(prefab, new Vector3(i * 2.0f, 0, 0), Quaternion.identity); }// 例2:Transform theClonedExplosion;theClonedExplosion = Instantiate(explosion) as Transform; //脚本里面定义: public GameObject PrefabNo; 那么, 在使用这个PrefabNo做Instantiate()的时候, 接收返回值变量的类型必须是GameObject: GameObject newObject = Instantiate(myPrefab) as GameObject; 又比如prefab 类型是自定义的

js笔记10

随声附和 提交于 2020-03-28 06:12:43
1.闭包    封装:减少代码的冗余,提高代码的重复利用率   继承:本来需要开辟多个空间,只需要开辟一个空间,减少内存的消耗,提高性能   函数归属:函数归属谁,跟他在哪调用没有关系,而跟他在哪定义有关   闭包的定义:函数在调用的时候,会形成一个私有作用域,内部的变量不能被外部访问,这种保护机制叫闭包(这就意味着函数调用完毕,这个函数形成的栈内存就会被销毁)   栈内存被销毁的案例:    function fn(){     var a=12;     a++;      console.log(a)   }   fn() //13   fn() //13   fn() //13 (因内部存在一个变量,所以在函数内部栈内存就会被销毁)       但有时候,我们不希望他被销毁 ,所以需要return   案例:    function fn(){     var a=12     return function(){       a++;       console.log(a)     }   }   var ss=fn()   ss()  //13   ss()  //14   ss()  //15    解析:       fn()调用完毕后得到的是一个匿名函数,但这个匿名函数在fn()这个作用域下定义的,所以匿名函数内部的变量在fn()作用域下查找

Android中文API(136) —— Bitmap

烈酒焚心 提交于 2020-03-26 05:14:23
前言   本章内容android.graphics.Bitmap章节,译为"位图",版本为Android 4.0 r1,翻译来自:"StreamH",欢迎访问他的博客:" http://blog.csdn.net/qs_csu ",再次感谢"StreamH" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。 声明   欢迎转载,但请保留文章原始出处:)     博客园: http://www.cnblogs.com/     Android中文翻译组: http://androidbox.sinaapp.com/ Bitmap 译者署名: StreamH 译者链接: http://blog.csdn.net/qs_csu 版本: Android 4.0 r1 结构 继承关系 public class Bitmap extends Object implements Parcelable java.lang.Object android.graphics.Bitmap 内部类    enum Bitmap.CompressFormat    详细说明位图的压缩格式    enum Bitmap.Config    位图的结构 常量 Int DENSITY_NONE 标志着该位图是以未知的像素密度创建的 参见 getDensity()

RestFul API 统一格式返回 + 全局异常处理

試著忘記壹切 提交于 2020-03-24 12:27:54
一、背景 在分布式、微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式。前端和后端进行交互,前端按照约定请求 URL 路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。 所以统一接口的返回值,保证接口返回值的幂等性很重要,本文主要介绍博主当前使用的结果集。 二、统一格式设计 2.1 统一结果的一般形式 示例: { # 是否响应成功 success: true, # 响应状态码 code: 200, # 响应数据 data: Object # 返回错误信息 message: "", } 2.2 结果类枚举 public enum ResultCodeEnum { /*** 通用部分 100 - 599***/ // 成功请求 SUCCESS(200, "successful"), // 重定向 REDIRECT(301, "redirect"), // 资源未找到 NOT_FOUND(404, "not found"), // 服务器错误 SERVER_ERROR(500,"server error"), /*** 这里可以根据不同模块用不同的区级分开错误码,例如: ***/ // 1000~1999 区间表示用户模块错误 // 2000~2999 区间表示订单模块错误 // 3000~3999 区间表示商品模块错误 // 。。。 ; /** *

java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)

為{幸葍}努か 提交于 2020-03-24 06:36:35
本文知识点(目录): 本文下面的“实例及附录”全是DOM解析的相关内容 1、xml解析的含义 2、XML的解析方式 3、xml的解析工具 4、XML的解析原理 5、实例 6、附录1(获取xml中的所有节点、根标签、根标签下的子标签、子标签中的文本内容) 7、附录2(获取xml中的所有节点、根标签、根标签下的子标签、子标签中的文本内容) 8、附录3(把xml文档中的信息封装到对象中) 1、xml解析的含义 xml文件除了给开发者看,更多情况下是使用程序读取xml文件中的内容 2、XML的解析方式 DOM解析 SAX解析 3、xml的解析工具 3.1、DOM解析工具 1.JAXP(oracle-Sun公司官方) 2.JDOM工具(非官方) 3.Dom4j工具(非官方的)。 三大框架(默认读取xml的工具就是DOM4j) 3.2、SAX解析工具 1.Sax解析工具(oracle-Sun公司官方) 4、XML的解析原理 4.1、DOM解析的原理 xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一个Document的对象树,通过document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容. 缺点: 内存消耗大 优点: 文档增删改查比较容易 4.2、SAX解析的原理 从上往下读,读一行处理一行。 DOM与SAX解析的区别 SAX解析原理 优点: 内存消耗小

正确理解Java方法的返回值

梦想与她 提交于 2020-03-23 13:04:21
首先来看一段代码 我们把这段代码称为代码①,接下来我们再来看另外一段代码 我们把这段代码称为代码②。 在代码①当中,定义了一个方法,这个方法声明的返回值类型是double,而实际通过return关键字返回的却是一个int型的值,但并没有引起编译错误。而在代码②当中,情况正好相反,方法声明的返回值类型是int,方法内部的return关键字实际返回了一个double类型的值,在这种情况下,编译器却报出了语法错误。 对比一下这两种情况,很多初学Java的小伙伴搞不清:为什么同样是方法声明的返回值类型与实际返回值的类型不相同,但一种情况不报错,而另一种情况却无法通过编译检查呢?要讲清楚这个问题,我们必须从为什么方法要声明返回值类型说起。 在Java语言中,要求程序员在定义一个方法的时候,必须在方法名称的前面声明这个方法的返回值类型。为什么要求你这么做呢?简单来说,就是编译器强制程序员必须公开一个信息,那就是:这个方法在运行之后会返回一个什么类型的值,只有这样,调用方法的人才知道要用一个什么类型的变量接收方法的运算结果。除此之外,编译器还要求:主调方法在接收返回值的过程中,必须以声明的返回值类型作为标准,而不是看实际返回值的类型。就拿代码①来说,声明的返回值类型是double,实际返回值是int,我们在程序中用变量接收方法返回值的时候,必须用double型变量接收

新手学习python(六)函数、列表生成式

独自空忆成欢 提交于 2020-03-23 12:17:25
1)定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。 2)使用函数的好处:1、简化代码;2、提高代码的复用性;3、代码可扩展 3)举个例子: def sayhello(): #使用关键字def定义函数,后面是函数名 print('hello world') #函数体 sayhello() #调用函数 4)参数传递 def calc(a,b): #a,b为形参,形式参数 res=a*b print('%s * %s=%s'%(a,b,res)) calc(7,8) #实参,实际参数 注意:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。 5)四种形参类型 1.位置参数:字面意思也就是按照参数的位置来进行传参,比如 说上面的calc函数,a和b就是位置参数,位置参数是必 传的,有几个位置参数在调用的时候就要传几个,否则就会报错了。 2.默认参数,默认参数就是在定义形参的时候,给函数默认赋一个值。例如: def op_file(file_name,content=None): #content为默认值参数,非必填 f = open(file_name,'a+',encoding='utf-8') f.seek(0) if content: #不为空代表写 f.write

C#的委托(delegate、Action、Func、predicate)

人盡茶涼 提交于 2020-03-22 15:11:04
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。 1.委托的声明 delegate我们常用到的一种声明 delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。 namespace ConsoleApplication1 { class Program { delegate void NumDelegate(int num); static void Main(string[] args) { AClass _a = new AClass(); _a.cwdelegate = _a.AddNum; _a.cwdelegate(20); NumDelegate num20delegate = new NumDelegate(Add20); Console.WriteLine("-------------------------------------------"); NumDelegate adddelegate = new NumDelegate(_a.AddNum); NumDelegate subdelegate = new NumDelegate(_a.SubNum); NumDelegate num30delegate = adddelegate + subdelegate;