java Thread 类的几种方法

//后台进程
/*
 * 对于java来说只要还有一个前台线程在运行,这个进程就不结束,如果一个进程
 * 只有后台线程,这个进程就会结束
 */
package xian_cheng;

public class Example06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("main线程是后台线程吗?"+Thread.currentThread().isDaemon());
		DamonThtead dt=new DamonThtead();//创建一个DamonThread对象dt;
		Thread t=new Thread(dt,"后台线程");//创建线程t共享dt资源
		System.out.println("t线程是后台线程吗?"+t.isDaemon());//java默认的是前台进程
		/*
		 *注意要将某个线程设置为后台线程,必须在该线程启动之前
		 *t.setDaemon(true);语句必须位于t.start之前
		*/
		t.setDaemon(true);//将线程t设置为后台线程
		t.start(); //开启线程
		for (int i = 0; i < 10; i++) {
			System.out.println(i);
		}
	}

}
class DamonThtead implements Runnable{
	public void run(){
		while (true) {
			System.out.println(Thread.currentThread().getName()
					+"------is running");
			
		}
		
	}
	
}

//线程的优先级
package xian_cheng;
import java.security.PublicKey;

public class Example07 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread minThread=new Thread(new MinPriority(),"优先级较低的线程");
		Thread maxThread=new Thread(new MaxPriority(),"优先级较gao的线程");
         minThread.setPriority(Thread.MIN_PRIORITY);
         maxThread.setPriority(10);
         maxThread.start();
         minThread.start();
	}

}

//定义类MaxPriority实现Runnable接口
class MaxPriority implements Runnable{
	public void run(){
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName()+
					"正在输出:"+i);
		}
	}
}
//定义类MinPriority实现Runnable接口
class MinPriority implements Runnable{
	public void run(){
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName()+
					"正在输出:"+i);
		}
	}
}

/线程的休眠

package xian_cheng;
/*
 * 线程的休眠,它能使线程进入阻塞状态
 * sleep方法声明抛出InterruptedException异常
 * 当线程调用sleep()方法后在指定的时间内该线程是不会执行的
 * sleep()是静态方法只能控制当前正在运行的线程
 * 
 */
public class Example08 {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub
		 Thread thread=Thread.currentThread();
		 System.out.println(thread.getName());
		new Thread(new SleepThread()).start();
		for (int i = 0; i < 10; i++) {
			if (i==5) {
				Thread.sleep(2000);
			}
			System.out.println("主线程正在输出:"+i);
			Thread.sleep(500);
		}

	}

}
class SleepThread implements Runnable{
	public void run(){
		for (int i = 0; i < 10; i++) {
			if (i==3) {
				try {
					Thread.sleep(2000);//当前线程休眠2秒
				} catch (InterruptedException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
			}
			System.out.println("线程一正在输出:"+i);
		
		try {
			Thread.sleep(2000);//当前线程休眠2秒
		} catch (InterruptedException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	}
}
/线程让步
package xian_cheng;
/*
 * 线程让步通过yield()方法来实现,与sleep()的区别是它不会阻塞该线程,
 * 只是将线程转换为就绪状态
 */
public class Example09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Thread t1=new YieldThread("线程A");
		Thread t2=new YieldThread("线程B");
		t1.start();
		t2.start();
	}

}


class  YieldThread extends Thread{
	public YieldThread(String name){
		super(name);//调用父类的构造方法
	}
	
	public void run(){
		for (int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName()+"---"+i);
			if (i==3) {
				System.out.print("线程让步:");
				Thread.yield();//线程做出让步
			}
			
		}
	}
	
}

/线程同步
package xian_cheng;
/*
 * 线程同步
 */
public class Example12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
         Ticket1 ticket1=new Ticket1();
         new Thread(ticket1,"窗口1").start();
         new Thread(ticket1,"窗口2").start();
         new Thread(ticket1,"窗口3").start();
         
         
	}

}

class Ticket1 implements Runnable{
	private int tickets=10;
	Object look=new Object();//定义一个对象作为同步代码块的锁
	/*
	 * 注意锁对象的创建代码不能放在run方法中,否者每个线程运行到run()方法都会
	 * 创建一个锁,这样每个线程都有一个不同的锁,每一个锁都有一个自己的标志位。
	 * 线程之间便不能产生同步的效果
	 */
	public void run(){
		while (true) {
			synchronized (look) {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO: handle exception
					e.printStackTrace();
				}
				if (tickets>0) {
					System.out.println(Thread.currentThread().getName()
							+"---卖出的票"+tickets--);
				}else {
					break;
				}
			}
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值