线程安全问题:多个线程操作同一个资源的时候,如下demo。下一篇博客,会有讲解解决方案。
package 多线程;
public class TraditionalThreadSynchronized {
public static void main(String[] args) {
/*出现如下错误:
* zhangsan
*lisi
*zhangsan
*liszhangsan
*i
*lisi
*zhangsan
*lizhangsan
*si
*zhlisi
*angsan
*lisi
*zhangsan
*lizhangsan
*si
*zhangsan
* */
new TraditionalThreadSynchronized().init();
}
private void init() {
/*
* 静态方法不能new内部类的实例对象:
*
* 内部类可以访问外部类的成员变量 而外部类的成员变量和对象绑定
*
* 而静态方法执行的时候可以没有对象,矛盾
*/
// final Outputer outputer=new Outputer();
// 第一个线程
Outputer outputer = new Outputer();// 内部类不能访问局部变量
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
outputer.output("zhangsan");
}
}
}).start();
// 另一个线程
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
outputer.output("lisi");
}
}
}).start();
}
class Outputer {
public void output(String name) {
int len = name.length();
for (int i = 0; i < len; i++) {
System.out.print(name.charAt(i));
}
System.out.println();
}
}
}