设置和获取线程的方式

鞋友们,当我们知道线程怎么用时,用的上手了,可是不知道那个是这个线程,所以现在就需要为线程设置名称了

好,那么来一个这个吧从!

方式一:

        public final String getName()//获取线程名称

                         getName()     获取线程名称

         public final void setName(String name)

                          setName()    设置线程名称

方式二:

通过带参构造:public Thread(String name)

好的先来方式一吧:

 public final void setName(String name)

public class MyThread extends Thread{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			String name = getName();
			System.out.println(name+"---"+(i+"helloworld"));
		}
	}

}
public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		
		//启动线程
		myThread.start();
		myThread2.start();
	}
}

public final void setName(String name)

public class MyThreadTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		
		//设置线程名称
		myThread.setName("小白兔");
		myThread2.setName("小乌龟");
		//启动线程
		myThread.start();
		myThread2.start();	
	}
}

//public Thread(String name)

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			String name = getName();
			System.out.println(name+"---"+(i+"helloworld"));
		}
	}


/*
注意下面这是这个类是无参构造获取父类方法
*/
	public MyThread() {
		super();
		// TODO Auto-generated constructor stub
	}
/*
再注意,下面这个,这个是类的有参构造获取线程名称的
*/

	public MyThread(String name) {
		super(name);
		// TODO Auto-generated constructor stub
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//创建线程对象
		MyThread myThread = new MyThread("小白兔");
		MyThread myThread2 = new MyThread("小乌龟");
		
		//设置线程名称
		/*myThread.setName("小白兔");
		myThread2.setName("小乌龟");*/
		//启动线程
		myThread.start();
		myThread2.start();	
	}
}

//public static Thread currentThread():返回当前正在执行的线程对象

这个是针对不是thread类的方法想获取线程名称的一个方法

public class MyRunnable implements Runnable{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			//String name = getName();
			//public static Thread currentThread():返回当前正在执行的线程对象
			String name = Thread.currentThread().getName();
			System.out.println(name+"---"+(i+"helloworld"));
		}		
	}
}

public class MyRunnableTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建MyRunnable类对象
		MyRunnable myRunnable = new MyRunnable();
		
		//创建线程对象
		Thread thread = new Thread(myRunnable,"小白兔");
		Thread thread2 = new Thread(myRunnable,"小乌龟");
		
		//设置线程名称---通过setName()设置
		/*thread.setName("小白兔");
		thread2.setName("小乌龟");*/
		
		//启动线程
		thread.start();
		thread2.start();
	}

}

接下来呢,我们再说一下线程的优先级吧

线程的优先级其实是线程再运行过程他获取CPU执行权并且以最多的数量来完成的,其他线程也会一次去抢这个CPU的执行权

因为CPU再执行过程中,它的空闲时间很多,为了能有效提高CPU的利用率,所以才会控制线程的优先级的有限数量

不多说了,再来一波吧!!!!

//public final int getPriority()获取优先级

//public final void setPriority(int newPriority)  设置优先级

public class MyThread extends Thread {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			String name = getName();
			System.out.println(name+"---"+i);
		}
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread thread = new MyThread();
		MyThread thread2 = new MyThread();
		
		//设置线程名称
		thread.setName("小白兔");
		thread2.setName("小乌龟");
		
		//获取线程优先级
		//public final int getPriority() 获取优先级
		System.out.println(thread.getPriority());//5
		System.out.println(thread2.getPriority());//5

		//启动线程
		thread.start();
thread2.start();
	}
}

 

线程控制之休眠线程

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			System.out.println(getName()+"---"+i+"---"+new Date());
			try {
				Thread.sleep(1000);//让线程休眠1秒
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}	
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		MyThread myThread3 = new MyThread();
		//设置线程名称
		myThread.setName("小白兔");
		myThread2.setName("小乌龟");
		myThread3.setName("小老虎");
		
		//启动线程
		myThread.start();
		myThread2.start();
		myThread3.start();
	}
}

 

线程控制之加入线程

public final void join():在A线程中调用B线程,让A线程停止,直至B线程执行完之后,A线程再执行。join()方法必须在线程启动后再使用

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			System.out.println(getName()+"---"+i);
		}
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		MyThread myThread3 = new MyThread();
		
		//设置名称
		myThread.setName("小白兔");
		myThread2.setName("小乌龟");
		myThread3.setName("小老虎");
		
		//启动线程
		myThread.start();
		try {
			myThread.join();//线程启动后,调用该方法
			//加入myThread线程,等该线程结束之后,再去执行其他线程
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		myThread2.start();
		
		myThread3.start();
	}
}

 

线程控制之礼让线程

public static void yield():主动让出cpu的执行权

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=10;i++){
			System.out.println(getName()+"---"+i);
			Thread.yield();
		}
		
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		
		//设置名称
		myThread.setName("熊大");
		myThread2.setName("熊二");
		
		//启动线程
		myThread.start();
		myThread2.start();
		
		//避免一个线程长时间占有 CPU资源,让多个线程的执行更和谐。
	}

}

线程控制之守护线程

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i = 1;i<=40;i++){
			System.out.println(getName()+"---"+i);
		}
	}
}

public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread myThread = new MyThread();
		MyThread myThread2 = new MyThread();
		MyThread myThread3 = new MyThread();
		
		//设置名称
		myThread .setName("主人");
		myThread2.setName("护卫A");
		myThread3.setName("护卫B");
		
		//将myThread2和myThread3设置为守护线程
		//setDaemon方法必须在start方法前定义
		myThread2.setDaemon(true);
		myThread3.setDaemon(true);
		
		//启动线程
		myThread.start();
		myThread2.start();
		myThread3.start();
		//当被守护线程结束后 这些守护线程也会随之结束
		
	}

}

线程控制之中断线程

public final void stop():强迫线程停止执行。

public void interrupt():中断线程。

import java.util.Date;

public class MyThread extends Thread{
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println(getName()+"启动了"+new Date());
		//让线程睡眠10秒
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			System.out.println("线程终止了");
		}
		
		System.out.println(getName()+"结束了"+new Date());
	}
}
public class MyThreadTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建线程对象
		MyThread myThread = new MyThread();
		//那如果睡眠时间设置的过长,我不想一直等待,我想等三秒后如果还没反应,就停止
		
		myThread.start();
		try {
			Thread.sleep(3000);//等待3秒
			//myThread.stop();
			myThread.interrupt();//将线程状态终止,并抛出一个异常InterruptedException
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//各位看,stop()方法,比较暴力,我等你3秒,你还没反应是不,直接干死
		//那如果我想等你3秒,如果没反应,我将你打断,继续往后执行
	}
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值