黑马程序员技术交流社区
标题:
谁帮我测试一下看有没有安全问题?为什么我测试有问题?
[打印本页]
作者:
魏冬
时间:
2012-12-13 17:03
标题:
谁帮我测试一下看有没有安全问题?为什么我测试有问题?
class resource_1{
String name;
String sex;
boolean b=false;
}
class input_1 implements Runnable{
resource_1 r;
input_1(resource_1 r){
this.r=r;
}
public void run(){
int x=0;
while(true){
synchronized(r){
if(r.b){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x==0){
r.name="丽丽";
r.sex="女";
}else{
r.name="旺财";
r.sex="男";
}
}
r.b=true;
r.notify();
}
x=(x+1)%2;
}
}
}
class output_1 implements Runnable{
resource_1 r;
output_1(resource_1 r){
this.r=r;
}
public void run(){
while(true){
synchronized(r){
if(!r.b){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(r.name+"....."+r.sex);
}
r.b=false;
r.notify();
}
}
}
}
public class 等待唤醒机制 {
public static void main(String[] args){
resource_1 r=new resource_1();
input_1 in=new input_1(r);
output_1 out=new output_1(r);
Thread t=new Thread(in);
Thread t1=new Thread(out);
t.start();
t1.start();
}
}
作者:
焦健
时间:
2012-12-13 19:33
class resource_1{
String name;
String sex;
boolean b=false;
}
class input_1 implements Runnable{
resource_1 r;
input_1(resource_1 r){
this.r=r;
}
public void run(){
int x=0;
while(true){
synchronized(r){
if(r.b){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(x==0){
r.name="丽丽";
r.sex="女";
}else{
r.name="旺财";
r.sex="男";
}
}
/*这里不能这么写,上面的if语句不能把
if(x==0){
r.name="丽丽";
r.sex="女";
}else{
r.name="旺财";
r.sex="男";
这句包含起来,包含起来第一次就执行不到了,无法进行赋值,如果像下面那样
加上sleep语句,就会看到打印的是null值;你可以更改sleep参数试一下,
*/
r.b=true;
r.notify();
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
x=(x+1)%2;//这句用该放到同步代码快中,如果放在这里,前面加上sleep语句你会看到属性都是连续打印的。
}
}
}
class output_1 implements Runnable{
resource_1 r;
output_1(resource_1 r){
this.r=r;
}
public void run(){
while(true){
synchronized(r){
if(!r.b){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(r.name+"....."+r.sex);
}
r.b=false;
r.notify();
}
}
}
}
public class 等待唤醒机制 {
public static void main(String[] args){
resource_1 r=new resource_1();
input_1 in=new input_1(r);
output_1 out=new output_1(r);
Thread t=new Thread(in);
Thread t1=new Thread(out);
t.start();
t1.start();
}
}
下面贴出我修改过的
作者:
焦健
时间:
2012-12-13 19:34
class resource_1{
String name;
String sex;
boolean b=false;
}
class input_1 implements Runnable{
resource_1 r;
input_1(resource_1 r){
this.r=r;
}
public void run(){
int x=0;
while(true){
synchronized(r){
if(r.b)
{
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(x==0){
r.name="丽丽";
r.sex="女";
}else{
r.name="旺财";
r.sex="男";
}
r.b=true;
r.notify();
x=(x+1)%2;
}
}
}
}
class output_1 implements Runnable{
resource_1 r;
output_1(resource_1 r){
this.r=r;
}
public void run(){
while(true){
synchronized(r){
if(!r.b){
try {
r.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(r.name+"....."+r.sex);
}
r.b=false;
r.notify();
}
}
}
}
public class Duo1 {
public static void main(String[] args){
resource_1 r=new resource_1();
input_1 in=new input_1(r);
output_1 out=new output_1(r);
Thread t=new Thread(in);
Thread t1=new Thread(out);
t.start();
t1.start();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2