今天写一下关于线程安全的代码块最简单最基础的思路是怎么样的。做的思维导图。上图
然后下面是具体的实例导图
代码如下
package com.qf.homework;//这一步是表面我创建了一个包 包名叫这个 包就是文件夹 在这个文件夹下的Java代码你直接复杂粘贴爆异常ctrl+1 万能修改
/*
-
1.使用同步方法,处理4个售票口卖火车票的临界资源安全问题。
*/
class ThreadOne implements Runnable {private int ticket = 1000 ;
@Override
public void run() {
//这里是线程运行的代码块 那这里就是放实现的功能的地方
//实现功能:第一步 先实现
// 第二步 设置同步锁
// 第三步 想一想用sleep可以更容易看到锁释放后线程抢cpu的情况
// TODO Auto-generated method stub
while (true) {synchronized (ThreadOne.class) {//第二步上锁 //第三步 用sleep将现象更加明显 //第一步实现 //这部分代码块实现了卖票 if (ticket>0) { //第三步 用sleep将现象更加明显 try { Thread.sleep(3); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+",出售第"+ticket); ticket--; }else { System.out.println(Thread.currentThread().getName()+",售票结束"); break; } } //第一步实现 //这部分代码块实现了卖票 }
}
}
public class HomeWork2MyHome {
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadOne mt = new ThreadOne();
//创建继承了runnable接口的实现类
//将实现类作为参数传入一条线程并且给这条线程取名字
Thread t1 = new Thread(mt,"售票口1");
Thread t2 = new Thread(mt,"售票口2");
Thread t3 = new Thread(mt,"售票口3");
Thread t4 = new Thread(mt,"售票口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
先写写看吧= = 实在不行我补上前面的基础学习思路。