java同步代码块的问题

java同步代码块的问题

public class T4 {

	public static void main(String[] args) {
		new Thread() {
			public void run() {
				while (true) {
					Printer.print1();

				}
			}
		}.start();
		new Thread() {
			public void run() {
				while (true) {

					Printer.print2();

				}
			}
		}.start();
	}

}

class Printer {
	public static void print1() {
		System.out.print("a");
		System.out.print("b");
		System.out.print("c");
		System.out.println();
	}

	public static void print2() {
		synchronized (Printer.class) {
			System.out.print("A");
			System.out.print("B");
			System.out.print("C");
			System.out.println();
		}

	}
}

老师我想问下,不是加了synchronized关键字把指定的代码块变成同步代码块后,同步代码块的代码执行完后才会执行其他线程的代码吗?

为什么我这还是会出现问题?

http://img1.sycdn.imooc.com//climg/5c8251c00001d08e10220780.jpg

我还想问:

是否要两段代码都必须要是相同的锁对象的同步代码才能同步?

如果像我上面的代码那样,一段是同步代码,另外一段不是同步代码,那么同步代码就没用了?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,被synchronize包裹的代码是指在该线程执行完之前,其他的线程不能执行其中的代码。而不是cpu不能执行其他的代码。祝:学习愉快~

  • MasonM 提问者 #1
    懂了谢谢老师!
    2019-03-11 18:51:22
好帮手慕阿满 2019-03-10 14:40:47

同学你好,这里应该是两段代码都加上synchronize后才能同步。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 MasonM #1
    请问为啥要两段代码都要加上synchronize后才能同步,被synchronize包裹的代码不是被执行完后cpu才能去执行其他的代码吗?
    2019-03-10 14:44:57
提问者 MasonM 2019-03-10 09:31:32

请问有老师能解答一下这个问题吗?谢谢

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师