java线程控制安全
synchronized()
在线程运行的时候,有时会出现线程安全问题
例如:买票程序,有可能会出现不同窗口买同一张编号的票
运行如下代码:
public class runable implements Runnable {
//此处定义变量是一个对象的变量,run()函数调用的时候不同的线程调用
int i=1;
@Override
public void run() {
while(true){
//输出当前线程名字和票数
System.out.println(Thread.currentThread().getName()+i);
i++;
//当前线程放弃CPU,重新竞争资源
Thread.yield();
if(i>100)break;
}
}
}
public class main { public static void main(String[] args) throws InterruptedException {
//实现接口
runable ra=new runable();
//生成Thread对象,并将接口对象作为参数
Thread t1=new Thread(ra);
Thread t2=new Thread(ra);
//给两个线程设置名字
t1.setName("线程一");
t2.setName("线程二");
//开始线程
t1.start();
t2.start();
}
}
会出现如下情况:
处理方法:加入线程锁
public class runable implements Runnable {
//此处定义变量是一个对象的变量,run()函数调用的时候不同的线程调用
int i=1;
@Override
public void run() {
//加入进程锁,锁住的是this这个对象,在this这个对象释放CPU之前,所有的含有进程锁的代码都不能运行
synchronized (this) {
while(true){
//输出当前线程名字和票数
System.out.println(Thread.currentThread().getName()+i);
i++;
//当前线程放弃CPU,重新竞争资源
Thread.yield();
if(i>100)break;
}
} }
}
java线程控制安全的更多相关文章
- Java 线程控制
一.线程控制 和线程相关的操作都定义在Thread类中,但在运行时可以获得线程执行环境的信息.比如查看可用的处理器数目(这也行?): public class RunTimeTest { public ...
- java线程控制、状态同步、volatile、Thread.interupt以及ConcurrentLinkedQueue
在有些严格的系统中,我们需要做到干净的停止线程并清理相关状态.涉及到这个主题会带出很多的相关点,简单的总结如下: 我们知道,在java中,有一个volatile关键字,其官方说明(https://do ...
- Java 线程控制(输出奇偶数)
两个线程,一个输出1,3,5,7......99:另一个输出2,4,6,8......100. 1.线程同步 public class ST2 { int i = 0; public static v ...
- Java并发1——线程创建、启动、生命周期与线程控制
内容提要: 线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程吗? 线程的创建与启动 线程的创建有哪几种方式?它们之间有什么区别? 线程的生命周期与线程控制 ...
- Java Thread线程控制
一.线程和进程 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位. 进程特征: A.独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己 ...
- 漫谈并发编程(二):java线程的创建与基本控制
java线程的创建 定义任务 在java中使用任务这个名词来表示一个线程控制流的代码段,用Runnable接口来标记一个任务,该接口的run方法为线程运行的代码段. public ...
- Java中的线程状态转换和线程控制常用方法
Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的 ...
- java多线程(六)线程控制类
1. 多线程控制类 为了保证多线程的三个特性,Java引入了很多线程控制机制,下面介绍其中常用的几种: l ThreadLocal l 原子类 l Lock类 l Volatile关键字 ...
- 浅谈 Java线程状态转换及控制
线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...
随机推荐
- Fraction to Recurring Decimal leetcode
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- linux系统常用快捷键
centos 命令快捷键: 挂起:Ctrl+s 解除挂起:ctrl+q 清屏:Ctrl+l 注销或退出:Ctrl+d 命令行光标移动: Ctrl+a 移动到命令行首 Ctrl+e 移动到命令行尾 Ct ...
- 使用Three.js网页引擎创建酷炫的3D效果的标签墙
使用Three.js引擎(这是开源的webgl三维引擎,gitgub)进行一个简单应用. 做一个酷炫的3d效果的标签墙(已经放在我的博客首页,大屏幕可见), 去我的博客首页看看实际效果 www.son ...
- SEO-友情链接注意事项
为什么要专门给友链一个区域呢?由此就可以想象到友情链接对一个网站有多重要前期,网站没有权重的时候,跟别人换友链,人家基本是不会换的因为你网站没权重,加了友链他也获取不到权重,对网站没有多少好处一般我们 ...
- 二、Fragment+RadioButton实现底部导航栏
在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activi ...
- 解决MVC模型验证在IE 6 7下不起作用或者报错
文件版本列出: Jquery版本1.7.1 jQuery Validation 版本1.9.0 (VS2012创建MVC项目自动生成的版本) 最好VS2012创建MVC项目自动生成的版本,而不是VS2 ...
- 性能测试平台效率优化的一次经验(python版)
在做性能测试平台的优化过程中,由于启动任务相对其他测试任务比较频繁,而目前30次两个包的交叉对比(30次)测试需要耗时30分钟整,因此打算优先对测试流程做一次优化,将测试时间消耗降低到20分钟. 由于 ...
- Alamofire源码解读系列(八)之安全策略(ServerTrustPolicy)
本篇主要讲解Alamofire中安全验证代码 前言 作为开发人员,理解HTTPS的原理和应用算是一项基本技能.HTTPS目前来说是非常安全的,但仍然有大量的公司还在使用HTTP.其实HTTPS也并不是 ...
- LinkedHashSet的概述和使用
LinkedHashSet的特点: 可以保证怎么存就怎么取 package online.msym.set; import java.util.LinkedHashSet; public class ...
- CSS.04 -- 浮动float、overflow、定位position、CSS初始化
标准流:行内/行内块元素横向有序排列 : 块元素纵向有序排列. 浮动:Float 语法:float:left/right : 设置浮动的元素,脱离标准流 浮动的框可以向左或向右移动,直到它的外边缘碰 ...