利用机器学习进行静态分析
12、线程思考 12.1. 变量建议使用栈封闭 所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。方法调用的时候会有一个栈桢,这是一个独立的空间。在这个独立空间创建跟使用则绝对是安全的,但是注意不要返回该变量哦! 12.2. 防止线程饥饿 优先级低的线程总是得不到执行机会,一般要保证资源充足、公平的分配资源、防止持有锁的线程长时间执行。 12.3 开发步骤 多线程编程不要为了用而用,引入多线程后会引入额外的开销。量应用程序性能一般:服务时间、延迟时间、吞吐量、可伸缩性。做应用的时候可以一般按照如下步骤:
阿姆达尔定律中 a为并行计算部分所占比例,n为并行处理结点个数:
12.4 影响性能因素
虽然func函数是非线程安全的,但是我们在调用该函数前加了一把锁进行保护,那么这时funcA函数就是线程安全的了,其本质就是我们用一把锁间接的保护了全局变量。
再看这样一段代码: 为什么呢? 因为无论我们调用多少次func函数,static局部变量都只会被初始化一次,这种特性可以很方便的让我们实现单例模式。 最后让我们来看下这种情况,那就是如果我们调用一个非线程安全的函数,那么我们的函数是线程安全的吗? 调用非线程安全代码
假如一个函数A调用另一个函数B,但B不是线程安全,那么函数A是线程安全的吗?答案依然是,要看情况。我们看下这样一段代码,这段代码在之前讲解过: (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |