class MyThread extends Thread { public static void main(String args[]) { MyThread t = new MyThread(); MyThread s = new MyThread(); t.start(); System.out.print("one."); s.start(); System.out.print("two."); } public void run() { System.out.print("Thread"); } }结果是
时间: 2024-04-28 12:19:46 浏览: 104
结果可能是 "one.Threadtwo.Thread",因为在主线程中,先启动了线程t并打印了"one.",然后启动了线程s并打印了"two."。在两个子线程中,都会打印"Thread",但是它们的执行顺序是不确定的,可能是先打印出t的"Thread",然后是s的"Thread",也可能是先打印出s的"Thread",然后是t的"Thread"。
相关问题
public class ThreadDemo1 { public static void main(String[] args) { Thread t1 = new MyThread1(); Thread t2 = new MyThread2(); t1.start(); t2.start(); } } class MyThread1 extends Thread{//1继承Thread public void run(){//重写run方法 for(int i=0;i<1000;i++){ System.out.println("你是谁啊?"); } } } class MyThread2 extends Thread{ public void run(){ for(int i=0;i<1000;i++){ System.out.println("开门!查水表的!"); } } }
这是一个Java多线程的示例代码,创建了两个线程,分别输出不同的信息。MyThread1和MyThread2都继承了Thread类,并重写了run()方法,run()方法是线程的执行体,当线程启动后会自动调用run()方法。在main()方法中,分别创建了MyThread1和MyThread2的实例,并调用start()方法启动线程。start()方法会使线程进入就绪状态,并自动调用run()方法开始执行线程。由于是多线程执行,因此输出的信息会交替出现。
public class DLTest { public static void main(String[] args) { String str = "ABC"; MyThread myThread = new MyThread(str); myThread.start(); synchronized (str){ System.out.println("str 变量的哈希值为:" + str.hashCode()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } try { myThread.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main is over"); } } class MyThread extends Thread{ String string; MyThread(String str){ this.string = str; } @Override public void run() { synchronized (string){ System.out.println("string 变量的哈希值为:" + string.hashCode()); } } }这段代码为什么没有死锁
这段代码没有死锁是因为主线程和 MyThread 线程在使用同步块时,都是在不同的时间段内使用的,因此不会产生互相等待对方释放锁的情况。
具体来说,主线程首先创建 MyThread 对象并启动了它的线程,然后获取了 str 对象的锁,并执行同步块中的代码。在这段代码执行过程中,MyThread 线程一直处于等待状态。
当主线程释放了 str 对象的锁后,MyThread 线程才获取了该锁,并执行了同步块中的代码。因为主线程已经释放了该锁,所以 MyThread 线程可以顺利地获取到该锁,避免了死锁的产生。
在主线程中,通过调用 myThread.join() 方法,主线程等待 MyThread 线程执行完毕后再结束,这也确保了 MyThread 线程在主线程结束前能够执行完毕。
阅读全文