public class MyThread implements Runnable
{
String MyString="yes";
public void run()
{
this.MyString="no";
}public static void main(String []args)
{
MyThread t=new MyThread();
new Thread(t).start();
for(int i=0;i<10;i++)
System.out.print(t.MyString);
}
}
最好是重要的语句注释下
解决方案 »
- 如果负责是面试刚毕业的,记得让他写一段排序代码
- Java 程序如何实现判断远程计算机snmp端口是否开放
- 我是学VB的,谁帮我把这个简单的程序加个注释
- 在一本书中看到有红黑树,但没有给出代码清单,请问谁有?
- java联机小游戏,做了一半,socket没学,联机不怎么会,求指导一个玩家控制点,一个玩家控制蛇,在电脑的局域网实现
- /** 高分 */ 关于String的排序
- 自定义ClassLoader 与Webservice 的问题
- JAVA对文件的操作难题
- 请问如何在TOMCAT4下部署一个WAR文件????
- comboBox返回的getSelectItem是一个object
- jdk
- 麻烦各位.帮个忙看个题目.关于圆形角度的问题
new Thread(t).start();
try{
Thread.sleep(100);
}catch(Exception e){
}
System.out.print(t.MyString);
}
{
String MyString="yes";
public void run()
{
this.MyString="no";
System.out.print(this.MyString);
}public static void main(String []args)
{
MyThread t=new MyThread();
new Thread(t).start();
for(int i=0;i<10;i++)
System.out.print(t.MyString);
}
}这样就看出来了...
for(int i=0;i<10;i++)
System.out.print(t.MyString);——t这个对象根本就不是一个线程,而且也未曾被改变t对象仅仅是实现了Runnable接口的一个普通类,而Runnable接口也是仅有一个抽象方法的接口(连本地方法都不是),也就说t其实根本不是个线程,只是一个普通对象。new Thread(t)才是线程而且是个匿名的。
看jdk api中对thread类的start方法的描述:
“使该线程开始执行;Java 虚拟机调用该线程的 run 方法。 结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)”——有点难懂,建议楼主这样试试:Thread tt = new Thread(t)
tt.start();
tt.join()
.....
public static void main(String []args) throws InterruptedException
{
ThreadTest t=new ThreadTest();
//new Thread(t).start();
Thread tt = new Thread(t);
tt.start();
tt.join();
for(int i=0;i<10;i++)
System.out.println(t.MyString);
}
原因是主线程main尚未结束、新线程也未真正开始。这是由于我们的代码用于测试,实际当中启动一个线程大多数是让它自己去做某件事,很少再次与它交互。
{
String MyString="yes";
Object mutex = new Object(); // 专门用于同步的对象。
boolean updated = false; // 数据是否已经更新? public void run()
{
synchronize (mutex) {
this.MyString="no";
updated = true; // 已经更新,无须继续等待
mutex.notifyAll();
}
} public static void main(String []args)
{
MyThread t=new MyThread();
new Thread(t).start();
for(int i=0;i<10;i++) {
System.out.print(t.MyString);
if (!updated) { // 如果还没有更新,则等待更新
synchronized (mutex) {
mutex.wait(); // 等待新线程更新数据完毕
}
}
}
}
}
线程同步一般实现implements Runnable来实现。用同步代码块synchroized(对象)来实现对象的锁定,当运行该线程时。“对象”的标志位为0。结束线程“对象”的标志为至1. 7.锁其标
import java.lang.Thread;
public class Text1
{
public static void main(String [] args)
{
TestThread tt=new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable //extends Thread
{
int tickets=100;
String str=new String("");
public void run()
{
while(true)
{
synchronized(str)//锁其标
{
if (tickets>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"is sealing tickets"+tickets--);
}
}
}
}
}
也可以在方法前面加个synchronized那就实现同步了 public synchronized void sals()