介绍java多线程例子
第三,网络服务器 多个用户长时间访问这个网页,网络服务器等待这些用户与服务器交互。 总结:需要用多线程 = 多任务共存长时间 + 多任务存在等待时间
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数
线程安全
出现线程安全就是在使用多线程的时候程序出现了不期望的结果。
怎样思考线程安全:线程中任何一步运行完都可能交出CPU的控制权。
class ThreadDemo {
public static void main(String[] args) {
TestThread t = new TestThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class TestThread implements Runnable {
int tickets = 100;
public void run() {
while(true) {
if(tickets<=0)
break;
//try{Thread.sleep(10);}catch(Exception e) {}
System.out.println(Thread.currentThread().getName() + " is saling " + tickets--);
}
}
}
例子展示了四个售票员一起卖这100张票,那么卖出同样序号的票是我们不期望看到了情况吧,上面已经提到了,分析线程安全的最基本的方法就是认为线程运行的时候任何情况下都可以交出CPU的控制权,上面一共启动了4个线程,现在假设tickets的值为1时,线程1在运行完“if(tickets<=0)”后交出CPU,后线程2得到了CPU,卖出了票1,后线程1重新得到了CPU,又卖出了票1或0。当然,上述情况是我们假设在什么情况下会出现象这样的线程安全的问题,在一般情况,我们运行这个程序好几次也不能看出这样的线程安全问题,那我们怎么确定这个问题呢?我们可以用“sleep(100)”来主动交出CPU来验证我们的想法:去掉上面注释的sleep再运行程序,得到
运行结果 写道