开发者社区> 壮壮father> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

java线程控制安全

简介: synchronized() 在线程运行的时候,有时会出现线程安全问题例如:买票程序,有可能会出现不同窗口买同一张编号的票 运行如下代码: public class runable implements Runnable { //此处定义变量是一个对象的变量,run()函数调用的时候不...
+关注继续查看

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中多线程的控制
1.需求: 用三个线程按顺序输出A,B,C十次,且不乱序。 2.相关方法: synchronized关键字 synchronized可以锁住代码段不被多个线程同时执行,可以锁住对象,也可以进行全局锁。
690 0
java 一个线程控制另一个线程
两种方法,一个用标记变量,另一个用语法 不多说,直接代码: 主方法一:         send s = new send();         s.
842 0
Java并发编程 - 线程安全性之原子性(三)(下)
Java并发编程 - 线程安全性之原子性(三)(下)
27 0
Java并发编程 - 线程安全性之有序性
Java并发编程 - 线程安全性之有序性
42 0
Java并发编程 - 线程安全性之简介
Java并发编程 - 线程安全性之简介
24 0
Java 并发编程(二):线程安全性
Java 并发编程(二):线程安全性
50 0
Java并发编程之线程安全、线程通信
Java多线程开发中最重要的一点就是线程安全的实现了。所谓Java线程安全,可以简单理解为当多个线程访问同一个共享资源时产生的数据不一致问题。为此,Java提供了一系列方法来解决线程安全问题。 synchronized synchronized用于同步多线程对共享资源的访问,在实现中分为同步代码块和同步方法两种。
1316 0
Java并发编程 -- 单例模式线程安全问题
单例模式是指对一个对象进行一次实例化,然后全局都可以调用该实例化对象来完成项目的开发。 在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。
797 0
Java并发编程 -- 线程安全、优先级设定
优先级设定 一个合理的优先级可以在一定条件下避免一些活跃性问题,比如死锁、饥饿等 public class Task implements Runnable{ @Override public void run() { while (true) { System.
789 0
java并发编程-线程安全1:servlet访问统计
非安全: @NotThreadSafe public class UnsafeCountingFactorizer extends GenericServlet implements Servlet { private long count = 0; public long getCount() { return count; } p
1066 0
+关注
壮壮father
从14年开始从事安卓开发。喜欢接触新鲜事物,不断的挑战自己
文章
问答
文章排行榜
最热
最新
相关电子书
更多
快速变化背景下,组织如何保持过程的稳定性
立即下载
Jpom一款低侵入式Java运维、监控软件
立即下载
JAVA反射原理以及一些常见的应用
立即下载