码迷,mamicode.com
首页 > 编程语言 > 详细

多线程之synchronized

时间:2018-05-07 15:31:33      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:执行   except   target   操作   imp   []   out   dex   tst   

java的堆中信息是共享的,线程是把会堆中信息拷贝,对副本进行操作,操作完再同步堆中的信息,而堆中的信息可能被b线程修改了,a线程的副本还是未修改前的,此时就引发多并发问题。解决多并发的问题就是通过枷锁,使原先多个线程并行执行程序转为多个线程串行执行程序。

相关api简介:

Thread

  Thread(Runnable target) 构造一个新线程,线程启动会调用target的run方法.

例;

请编写2个线程,线程1顺序输出1,3,5,……, 99 等奇数,每个数 一 。

线程2顺序输出2,4,6……100等偶数,每个数 一 。

最终的结果要求是输出为 自然顺序:1,2,3,4,……99,100。

public class TestLock2 implements Runnable {
	private int num;

	private int initNum;

	public TestLock2(int num, int initNum) {
		this.num = num;
		this.initNum = initNum;
	}

	@Override
	public void run() {
		synchronized (this) {
			while (initNum < num) {
				this.notify();
				System.out.println(Thread.currentThread().getName() + ":" + initNum);
				initNum++;
				try {
					this.wait();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}

	}

	public static void main(String[] args) {
         //打印一百个数,两个线程个循环50次,两个都是用testLock2这个实例构造,testLock2里面的全局变量是共享的 TestLock2 testLock2 = new TestLock2(51, 1); Thread thread1 = new Thread(testLock2); thread1.setName("线程1"); Thread thread2 = new Thread(testLock2); thread2.setName("线程2"); thread1.start(); try { thread1.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } thread2.start(); } }

  

 

多线程之synchronized

标签:执行   except   target   操作   imp   []   out   dex   tst   

原文地址:https://www.cnblogs.com/thomas-seven/p/9002791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!