java multithreading: 2, cuatro formas de crear un hilo? La diferencia entre el ejecutable y exigible? Enhebrar ¿En qué estado?

1, cuatro formas de crear un hilo

método (1) herencia de clases de hilo, override run ()

public class Rabbit  extends Thread{
	@Override
	public void run() {
		//线程体
		for(int i=0;i<100;i++){
			System.out.println("兔子跑了"+i+"步");
		}
	}	
}
public class RabbitApp {

	public static void main(String[] args) {
		// 创建子类对象
		Rabbit rab = new Rabbit();	
		// 对象.start()
		rab.start();// 不要调用run()方法
	}
}

(2) para lograr interface Runnable, el método run ()

public class Programmer implements Runnable{
	@Override
	public void run() {
		for(int i=0;i<67;i++)
		{
			System.out.println("一边敲helloWorld。。。。。");
		}
	}
}
/**
 *  * 创建线程:实现runnable接口+重写Run方法
 * 启动多线程:使用静态代理
 * (1)创建真实角色
 * (2)创建代理角色+真实角色的引用
 * (3)调用.start()
 * @author Linlin Zhao
 *
 */
public class ProgrammerApp {
public static void main(String[] args) {
	//创建真实角色
	Programmer pro=new Programmer();
	//创建代理角色+真实角色的引用
	Thread proxy=new Thread(pro);
	//调用start
	proxy.start();
	for(int i=0;i<67;i++)
	{
		System.out.println("一边谈恋爱。。。。。");
	}
}
}

(3) implementar la interfaz Callable, método call ()

/**
 * Callable可以对外声明异常,同时可以返回值
 * @author Linlin Zhao
 *
 */
public class CallableCreate {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		//创建线程
		ExecutorService ser=Executors.newFixedThreadPool(2);
		Race tortoise=new Race("乌龟",20);//小乌龟延时1000ms
		Race rabbit=new Race("小兔子",50);//小兔子休息20000ms
		//获取值
		Future<Integer> result1=ser.submit(tortoise);
		Future<Integer> result2=ser.submit(rabbit);
		System.out.println("--------------");
		
		Thread.sleep(10000);
		tortoise.setFlag(false);
		rabbit.setFlag(false);//停止线程循环
		
		int num1=result1.get();
		int num2=result2.get();
		System.out.println("乌龟跑了----->"+num1+"步");
		System.out.println("小兔子跑了----->"+num2+"步");
		//停止服务
		ser.shutdown();
	}

}
class Race implements Callable<Integer>{
private String name;//名称
private long time;//延时时间
private boolean flag=true;
private int step=0;//步数

public Race(){
	
}
public Race(String name){
	this.name=name;
}

	public Race(String name, long time) {
	super();
	this.name = name;
	this.time = time;
}
	@Override
	public Integer call() throws Exception {
		while (flag){
			Thread.sleep(time);//延时
			step++;
		}
		return step;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public long  getTime() {
		return time;
	}
	public void setTime(long time) {
		this.time = time;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	public int getStep() {
		return step;
	}
	public void setStep(int step) {
		this.step = step;
	}
	
}

(4) el uso de la agrupación de hebras para crear un hilo de puesta en marcha.

El código de ejemplo enlaces visibles:
conceptos relacionados con el grupo de subprocesos de las cuatro formas de crear, problemas de estado y otros

2 diferencia, ejecutable y exigible en

Ambos son las interfaces, que puede ser utilizado para crear un hilo. Se puede llamar pertenecientes clases marco Ejecutor. interfaz invocable es similar a la función Ejecutable, la diferencia principal reside en los siguientes puntos:
(1) Callable puede proporcionar un valor de retorno después del final de la tarea. No Ejecutable.
método (2) que se puede llamar la llamada () puede lanzar una excepción. Los ejecutar Ejecutable () métodos no pueden.
El procedimiento (3) la operación Callable puede obtener un objeto futuro que se puede utilizar para monitorizar los llamadas subproceso de destino la llamada al método () de la caja.

3, el hilo qué estado?

Hilo tiene cinco estados: estado del recién nacido, estado listo, estado de ejecución, estado de bloqueo, el estado de la muerte.
Aquí Insertar imagen Descripción
(1) estado naciente: (Nuevo)
Después de crear un objeto de hilo, el hilo que está entrando en el estado naciente. Enhebrar estado naciente tiene su propio espacio de memoria, el método entra en un estado preparado (runnablle) llamando al inicio ().

(2) estado de preparado: (Ejecutable)
hilo en el estado listo ya tiene una condición de marcha, pero no se ha asignado CPU, así que en un estado listo, en espera de la CPU asigna sistema. Una vez que la CPU, el hilo en funcionamiento (en ejecución) y se hace llamar el método run ().

(3) el estado de funcionamiento:
hilo de estado de ejecución realiza su método propio run (). Debido a que el bloqueo o hasta la finalización de la tarea causas de muerte.

(4) bloquearon Estado:
el hilo se está ejecutando el llamado estado de bloqueo no se ejecuta otra vez, renunciar temporalmente a la CPU, en el estado bloqueado. A continuación, otros hilos en el estado preparado puede obtener el tiempo de CPU, entrará en el estado de funcionamiento. Hasta que la causa de la obstrucción de la eliminación, se puede enroscar en el estado listo, esperando a que el sistema para reasignar CPU comienzan desde la posición de bloqueo para seguir funcionando.
Provoca la obstrucción: Llamada del sueño (), join (), rendimiento () y así sucesivamente; esperando para adquirir IO y otros recursos.

(5) el estado de la muerte:
La última etapa del ciclo de vida de la rosca. Hay dos causas de muerte en el hilo: uno es para completar la muerte injusta de tareas y la otra es para llamar a la parada () o método destroy () para forzar la terminación de la rosca, pero no recomienda el uso de los dos métodos, el primero será una excepción, que las fuerzas terminación no podrá liberar el bloqueo.

Publicado 57 artículos originales · alabanza ganado 13 · vistas 1098

Supongo que te gusta

Origin blog.csdn.net/weixin_42924812/article/details/105209810
Recomendado
Clasificación