亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? java15.htm

?? E-books about Java Programing in Spanish
?? HTM
字號:
<HTML>

<HEAD>

<TITLE>Java desde Cero</TITLE>



<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">

</HEAD>

<BODY background=/iconos/1.gif  TEXT=000000 LINK=FF0000 VLINK=A62A2A>
<H1>La liebre y la tortuga (y el guepardo)<BR>

</H1>

<P>

Java dispone de un mecanismo de prioridades para los <I>threads</I>,

de modo de poder asignar m&aacute;s tiempo de CPU a un thread

que a otro. T&iacute;picamente se asigna una prioridad de 1 a

10 (10 es la mayor prioridad) mediante <I>setPriority</I>, como

en el ejemplo que sigue:<BR>

<PRE>

<FONT SIZE=2>public class Ejemplo21 {



    static Animal	tortuga;

    static Animal	liebre;

    static Animal	guepardo;



    public static void main(String argv[])

      throws InterruptedException {



	tortuga  = new Animal(2, &quot;T&quot;);

	liebre   = new Animal(3, &quot;L&quot;);

	guepardo = new Animal(4, &quot;G&quot;);

	tortuga.start();

	liebre.start();

	guepardo.start();

	tortuga.join();

	liebre.join();

	guepardo.join();

    }

}



class Animal extends Thread {

	String nombre;



	public Animal(int prioridad, String nombre) {

		this.nombre = nombre;

		setPriority(prioridad);

	}



	public void run() {

		for (int x = 0; x &lt; 30; x++) {

			System.out.print( nombre );

			yield();

		}

		System.out.println(&quot;\nLlega &quot;+nombre );

	}

}

</FONT>

</PRE>

<P>

La salida de este programa, ejecutado con <I>java Ejemplo21</I>,

es por ejemplo:<BR>

<PRE>

<FONT SIZE=2>C:\java\curso&gt;java Ejemplo21

GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG

Llega G

L<B>T</B>LLLLLLLLLLLLLLLLLLLLLLLLLLLLL

Llega L

TTTTTTTTTTTTTTTTTTTTTTTTTTTTT

Llega T

</FONT>

</PRE>

<P>

Como se ve, a pesar de haber arrancado antes la tortuga, casi

todo el tiempo de CPU lo usa primero el Guepardo, luego la Liebre

(aunque algo queda para la pobre tortuga, como se ve en la T marcada),

y finalmente para la Tortuga. No todas las corridas ni todos los

sistemas dan igual salida, ya que &eacute;sta depende de la carga

del procesador y de la implementaci&oacute;n de Java particular.

<P>

Este programa simplemente crea tres animales (clase <FONT FACE="Arial">Animal</FONT>),

asigna un thread a cada uno y los ejecuta. Este ejemplo est&aacute;

hecho en base a uno del libro &quot;Programaci&oacute;n Java&quot;

de Macary y Nicolas.

<H2>Sincronicemos los relojes</H2>

<P>

Un problema b&aacute;sico del multithreading es cuando varios

programas (o, para el caso, varios threads) acceden a los mismos

datos: &#191;c&oacute;mo sabemos si uno de ellos no los modifica

mientras los est&aacute; usando otro?.

<P>

Veamos un ejemplo, donde suponemos que varios threads usan la

variable <FONT FACE="Arial">valorImportante</FONT>:<BR>

<PRE>

<FONT SIZE=2>	if  (valorImportante &gt; 0 ) {

		..... algo se procesa ac&aacute; ........

<B>		valorImportante = valorImportante - 1;

</B>		..... sigue.....................

	}<BR>

</FONT>

</PRE>

<P>

&#191;C&oacute;mo nos aseguramos que <FONT FACE="Arial">valorImportante</FONT>

no cambi&oacute; entre el <FONT FACE="Arial">if</FONT> y la l&iacute;nea

resaltada? Otros threads pueden haberlo modificado mientras tanto.

Asimismo, puede suceder que dos threads est&eacute;n ejecutando

la misma porci&oacute;n de c&oacute;digo, y se pierda uno de los

decrementos. Imaginen algo as&iacute;:

<PRE>

<FONT SIZE=2>	(antes)		valorImportante = 10

	(thread 1)	lee valorImportante = 10

	(thread 2)	lee valorImportante = 10

	(thread 1)	10 -1 = 9

	(thread 2)	10 -1 = 9

	(thread 2)	asigna 9 a valorImportante

	(thread 1)	asigna 9 a valorImportante

	(despu&eacute;s)	valorImportante = 9</FONT>

</PRE>

<P>

Como vemos, a pesar de haber restado dos veces, hemos perdido

una de las restas. Aunque usemos -= en vez de la resta es lo mismo,

porque el c&oacute;digo igualmente se resuelve en varios pasos

(varias <I>operaciones at&oacute;micas</I>).

<P>

Para evitar esto, Java nos brinda la palabra clave Synchronized,

que bloquea el acceso a una variable a todos los threads menos

el que lo est&aacute; usando.

<P>

Vamos a ver un caso espec&iacute;fico; se trata de dos contadores

que usan el mismo sumador para sumar de a uno una cantidad <FONT FACE="Arial">a</FONT>.

Supuestamente entre los dos deben llevar el sumador (<FONT FACE="Arial">a</FONT>)

hasta 20000.<BR>

<PRE>

<FONT SIZE=2>// Archivo Ejemplo22.java, compilar con javac Ejemplo22.java, ejecutar con java Ejemplo22



public class Ejemplo22 {

	public static void main(String argv[]) {

		Sumador A = new Sumador();		// un &uacute;nico sumador

		Contador C1 = new Contador(A);	// dos threads que lo usan...

		Contador C2 = new Contador(A);	// ...para sumar

		C1.start();

		C2.start();

		try {

			C1.join();

			C2.join();

		}

		catch (Exception e) {

			System.out.println(e);

		}

	}

}





class Contador extends Thread {

	Sumador s;



	Contador (Sumador sumador) {

		s = sumador;		// le asigno un sumador a usar

	}



	public void run() {

		s.sumar();		// ejecuto la suma

	}

}





class Sumador {

	int a = 0;

	public void sumar() {

		for (int i=0; i&lt;10000; i++ ) {

			if ( (i % 5000) == 0 ) {		// &quot;%&quot; da el resto de la divisi&oacute;n:

				System.out.println(a);	// imprimo cada 5000

			}

			a += 1;

		}

		System.out.println(a);			// imprimo el final

	}

}



</FONT>

</PRE>

<P>

Ejecutando esto nos da m&aacute;s o menos as&iacute; (cada corrida

es diferente, dependiendo de c&oacute;mo se &quot;chocan&quot;

los threads y la carga de la CPU):<BR>

<PRE>

<FONT SIZE=2>C:\java\curso&gt;java Ejemplo22

0

87

8926

10434

14159

17855<BR>

</FONT>

</PRE>

<P>

Esto se debe justamente a lo que explic&aacute;bamos al principio:

a veces los dos threads intentan ejecutar <FONT FACE="Arial">a

+= 1</FONT> simult&aacute;neamente, con lo que algunos incrementos

se pierden.

<P>

Podemos solucionar esto modificando el m&eacute;todo <FONT FACE="Arial">run()</FONT>:

<BR>

<PRE>

<FONT SIZE=2>	public void run() {

<B>		synchronized (s) {

</B>			s.sumar();

<B>		}

</B>	}<BR>

</FONT>

</PRE>

<P>

Con esto, s&oacute;lo a uno de los dos threads se les permite

ejecutar s.sumar() por vez, y se evita el problema. Por supuesto,

el otro thread queda esperando, por lo que m&aacute;s vale no

utilizar esto con m&eacute;todos muy largos ya que el programa

se puede poner lento o a&uacute;n bloquearse.

<P>

La salida ahora ser&aacute;:<BR>

<PRE>

<FONT SIZE=2>C:\java\curso&gt;java Ejemplo22

0				&lt;

5000				&lt; primer thread

10000				&lt;

10000				(

15000				( segundo thread

20000				(<BR>

</FONT>

</PRE>

<P>

Lo mismo logramos (y en forma m&aacute;s correcta) declarando

como synchronized al m&eacute;todo <FONT FACE="Arial">sumar()</FONT>:

<PRE>

<FONT SIZE=2>	public synchronized void sumar() { .............</FONT>

</PRE>

<P>

Esto es mejor porque la clase que llama a <FONT FACE="Arial">sumar()</FONT>

no necesita saber que tiene que sincronizar el objeto antes de

llamar al m&eacute;todo, y si otros objetos (en otros threads)

lo llaman, no necesitamos preocuparnos.<BR>

<H2>M&aacute;s sincronizaci&oacute;n</H2>

<P>

Otra manera de sincronizar el acceso de los threads a los m&eacute;todos,

es lograr que &eacute;stos se pongan de acuerdo entre s&iacute;,

esperando uno hasta que otro realiz&oacute; alguna tarea dada.

Para esto se usan los m&eacute;todos <FONT FACE="Arial">wait()</FONT>

y <FONT FACE="Arial">notify()</FONT>. Cuando un thread llama a

<FONT FACE="Arial">wait()</FONT> en un m&eacute;todo de un objeto

dado, queda detenido hasta que otro thread llame a <FONT FACE="Arial">notify()</FONT>

en alg&uacute;n m&eacute;todo del mismo objeto.

<P>

Por ejemplo, vamos a suponer cuatro empleados que se encuentran

con su jefe y lo saludan, pero s&oacute;lo luego de que &eacute;ste

los salude primero.<BR>

<PRE>

<FONT SIZE=2>public class Ejemplo23 {



	public static void main(String argv[]) {

		Saludo hola = new Saludo();

		Personal pablo = new Personal(hola, &quot;Pablo&quot;, false);

		Personal luis = new Personal(hola, &quot;Luis&quot;, false);

		Personal andrea = new Personal(hola, &quot;Andrea&quot;, false);

		Personal pedro = new Personal(hola, &quot;Pedro&quot;, false);

		Personal jefe = new Personal(hola, &quot;JEFE&quot;, true);

		pablo.start();

		luis.start();

		andrea.start();

		pedro.start();

		jefe.start();

		try {

			pablo.join();

			luis.join();

			andrea.join();

			pedro.join();

			jefe.join();

		}

		catch (Exception e) {

			System.out.println(e);

		}

	}

}





class Saludo {

	synchronized void esperarJefe(String empleado) {

	  try {

		wait();

		System.out.println(empleado+&quot;&gt; Buenos dias jefe!&quot;);

	  }

	  catch (InterruptedException e) {

		System.out.println(e.toString());

		

	  }

	}



	synchronized void saludoJefe() {

		System.out.println(&quot;JEFE&gt; Buenos dias!&quot;);

		notifyAll();

	}

}





class Personal extends Thread {

	String nombre;

	Saludo saludo;

	boolean esJefe;



	Personal (Saludo s, String n, boolean j) {

		nombre = n;

		saludo = s;

		esJefe = j;

	}



	public void run() {

		System.out.println(&quot;(&quot;+nombre+&quot; llega)&quot;);

		if (esJefe)

			saludo.saludoJefe();

		else

			saludo.esperarJefe(nombre);

	}

}<BR>

</FONT>

</PRE>

<P>

Us&eacute; <FONT FACE="Arial">notifyAll()</FONT> en lugar de <FONT FACE="Arial">notify()</FONT>,

porque en el segundo caso s&oacute;lo se notificar&iacute;a al

primer thread (el primer empleado en llegar) y no a los dem&aacute;s,

que se quedar&iacute;an en el <FONT FACE="Arial">wait()</FONT>.

<P>

Como se ve en la salida, a pesar de que los empleados est&aacute;n

en condiciones de saludar, no lo hacen hasta que no llega el jefe:

<BR>

<PRE>

<FONT SIZE=2>C:\java\curso&gt;java Ejemplo23

(Pablo llega)

(Luis llega)

(Andrea llega)

(Pedro llega)

(JEFE llega)

JEFE&gt; Buenos dias!

Luis&gt; Buenos dias jefe!

Pedro&gt; Buenos dias jefe!

Andrea&gt; Buenos dias jefe!

Pablo&gt; Buenos dias jefe!<BR>

</FONT>

</PRE>

<P>

Aqu&iacute; hice trampa: a veces, el jefe llega y saluda antes

que alguno de los empleados, por lo que ese empleado se queda

esperando indefinidamente. Prueben de modificar las clases para

que el jefe no salude hasta que no est&eacute;n todos los empleados

presentes...

<P>

Un buen ejercicio antes del pr&oacute;ximo cap&iacute;tulo!<BR>

<BR>

<P>

Jorge Bourdette

<P>

<A HREF="file:///C:/WINDOWS/Personal/mailto:jpb@amarillas.com" >jpb@amarillas.com</A>

<BR>

</BODY>

</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品人人做人人综合| 91亚洲国产成人精品一区二区三| 欧美日韩免费高清一区色橹橹 | 制服.丝袜.亚洲.中文.综合| 亚洲v精品v日韩v欧美v专区| 欧美精品一卡二卡| 老鸭窝一区二区久久精品| 欧美一区二区三区日韩视频| 日本欧美一区二区| 日韩精品一区二区三区视频| 经典三级一区二区| 欧美激情一区在线| 一本久久a久久免费精品不卡| 亚洲国产美国国产综合一区二区| 欧美日韩一区二区不卡| 久久国产夜色精品鲁鲁99| 久久精品欧美一区二区三区不卡 | 精品久久久久久最新网址| 日韩欧美亚洲国产精品字幕久久久| 欧美日韩免费观看一区二区三区 | 93久久精品日日躁夜夜躁欧美| 久久久久99精品国产片| 成人久久视频在线观看| 最好看的中文字幕久久| 岛国一区二区三区| 国产精品美日韩| caoporen国产精品视频| 亚洲欧洲日韩av| 一道本成人在线| 亚洲最大成人综合| 一本到高清视频免费精品| 亚洲亚洲精品在线观看| 在线不卡的av| 麻豆国产精品官网| 久久品道一品道久久精品| 久久精品国产色蜜蜜麻豆| 欧美人xxxx| 5566中文字幕一区二区电影| proumb性欧美在线观看| 欧美日韩午夜在线| 日本不卡中文字幕| 精品国产免费久久| 色综合久久精品| 天堂久久一区二区三区| 国产精品人妖ts系列视频| 国产成人亚洲综合a∨婷婷| 亚洲综合在线第一页| 欧美一区二区三区日韩| 午夜精品福利久久久| 日本一区二区三区在线观看| 欧洲精品视频在线观看| 粉嫩高潮美女一区二区三区| 一区二区三区av电影| 国产亚洲制服色| 欧美性猛交xxxxxx富婆| 丰满白嫩尤物一区二区| 亚洲成av人片观看| 精品国产乱码久久久久久蜜臀| 国产精品99久久久久久有的能看| 午夜精品久久久久久久久久久| 日韩午夜激情av| 在线一区二区视频| 精品在线一区二区三区| 午夜成人在线视频| 国产亚洲精品精华液| 欧美精品电影在线播放| caoporn国产精品| 国产乱子伦视频一区二区三区| 亚洲综合色区另类av| 正在播放亚洲一区| 777久久久精品| 色悠悠亚洲一区二区| 成人黄色av电影| 麻豆免费精品视频| 奇米888四色在线精品| 一区二区在线免费| 国产亚洲成aⅴ人片在线观看 | 亚洲欧美一区二区在线观看| 91麻豆精品国产综合久久久久久 | 日韩精品中文字幕在线不卡尤物 | 国产精品美女久久久久久久久久久 | 精品国产伦理网| 91一区二区三区在线观看| 成av人片一区二区| 九九久久精品视频| 国产在线不卡一卡二卡三卡四卡| 亚洲成人自拍一区| 婷婷一区二区三区| 亚洲精品午夜久久久| 亚洲专区一二三| 亚洲图片激情小说| 亚洲一区二区视频在线观看| 最近中文字幕一区二区三区| 亚洲精品欧美专区| 成人欧美一区二区三区1314| 国产精品传媒在线| 国产精品久久久久久久久免费桃花 | 日韩精品一区二区三区三区免费| 欧美在线色视频| 欧美三级日本三级少妇99| 在线观看91精品国产入口| 91黄色在线观看| 91国在线观看| 欧美三级在线视频| 精品免费视频.| 精品不卡在线视频| 日本一区二区三区久久久久久久久不| 精品国产一区二区在线观看| 国产三级精品视频| 国产精品欧美一区喷水| 一区二区三区波多野结衣在线观看| 亚洲美女在线国产| 免费人成在线不卡| 久久av中文字幕片| jlzzjlzz亚洲女人18| 波多野结衣亚洲| 99免费精品视频| 在线观看欧美日本| 欧美日韩亚洲另类| 欧美一级专区免费大片| 欧美一级爆毛片| 国产精品你懂的| 亚洲欧洲性图库| 亚洲一区电影777| 激情综合网激情| 97久久久精品综合88久久| 狠狠色丁香九九婷婷综合五月| 蜜桃视频第一区免费观看| 亚洲精品国产a久久久久久| 日韩和欧美一区二区| 成人免费观看视频| 不卡的电视剧免费网站有什么| 色偷偷成人一区二区三区91| 91黄色激情网站| 欧美一区二区在线免费播放| www欧美成人18+| 中文字幕亚洲在| 亚洲午夜成aⅴ人片| 久久激情综合网| 成人国产精品免费网站| 欧美一级艳片视频免费观看| 日韩欧美一级二级| 亚洲激情第一区| 蜜臂av日日欢夜夜爽一区| 国产精品自在在线| 色偷偷一区二区三区| 秋霞国产午夜精品免费视频| xvideos.蜜桃一区二区| 国产免费久久精品| 欧美一区二区三区人| 久久精品国产澳门| 26uuu国产日韩综合| 亚洲精品一区在线观看| 亚洲国产日韩av| 国产成人无遮挡在线视频| 欧美一级高清片在线观看| 亚洲丝袜精品丝袜在线| 国产一区二区福利| 欧美性生交片4| 最新国产成人在线观看| 国产伦精一区二区三区| 精品蜜桃在线看| 亚洲无人区一区| 97se狠狠狠综合亚洲狠狠| 欧美成人三级在线| 亚洲午夜视频在线| 夫妻av一区二区| 国产女主播在线一区二区| 日韩不卡在线观看日韩不卡视频| zzijzzij亚洲日本少妇熟睡| 91麻豆精品国产91久久久更新时间| 欧美午夜一区二区三区| 欧美日韩亚洲综合一区| 欧美一区午夜精品| 亚洲欧美日韩国产手机在线 | 男女性色大片免费观看一区二区| 91猫先生在线| 国产日本亚洲高清| 久久精品国产99| 欧美日韩一区二区三区四区五区| 国产日韩欧美综合在线| 精品一区二区三区在线播放视频 | 五月婷婷激情综合| 欧美人牲a欧美精品| 亚洲国产精品一区二区久久恐怖片 | 欧美高清视频一二三区| 亚洲视频一区二区免费在线观看 | 韩国成人在线视频| 欧美日韩国产高清一区二区| 亚洲六月丁香色婷婷综合久久 | 欧美激情一区二区在线| 国产麻豆精品在线| 久久久青草青青国产亚洲免观| 视频在线观看91| 欧美日韩一级片在线观看| 国产精品色噜噜| 91久久精品一区二区二区| 欧美男男青年gay1069videost| 日本欧美一区二区在线观看| 欧美一级片在线|