1
00:00:01,750 --> 00:00:07,880
Salve, questo è un po 'un po' nano secondo sguardo all'interruzione del thread che

2
00:00:07,870 --> 00:00:10,440
è anche legato alla cooperazione.

3
00:00:10,510 --> 00:00:16,660
Quindi, per le minacce che guardiamo indietro le scorte perché corrono fino al completamento, ma

4
00:00:16,660 --> 00:00:24,440
a volte vorremmo interrompere una determinata attività o una discussione prima del completamento, ad esempio nel nostro programma di indicizzazione.

5
00:00:24,700 --> 00:00:29,930
Se una pagina impiega troppo tempo per il download, potremmo voler interrompere quel particolare thread.

6
00:00:30,370 --> 00:00:36,190
Si può ricordare da una delle nostre demo precedenti che uno dei thread del downloader è stato

7
00:00:36,190 --> 00:00:42,340
bloccato in quanto non è stato possibile scaricare la pagina a causa di qualche problema sul server Web

8
00:00:42,340 --> 00:00:46,130
e abbiamo dovuto interrompere manualmente il programma anziché arrestarlo esplicitamente.

9
00:00:46,130 --> 00:00:51,080
Allo stesso modo, quando un utente esce da un pulsante di annullamento e dall'interfaccia utente, potrebbe essere necessario

10
00:00:51,170 --> 00:00:52,470
arrestare il thread corrispondente.

11
00:00:54,080 --> 00:01:00,350
Un altro motivo potrebbe essere che un'applicazione deve essere arrestata rapidamente a causa di motivi di prestazioni.

12
00:01:00,350 --> 00:01:05,810
Quindi c'è stata una perdita di memoria e stiamo esaurendo la memoria che sta causando la lentezza

13
00:01:05,810 --> 00:01:07,620
nel tempo di risposta dell'applicazione.

14
00:01:07,820 --> 00:01:13,460
In questo caso, potremmo voler riavviare il server Web e nel processo interrompere qualsiasi thread in

15
00:01:13,460 --> 00:01:15,400
background in esecuzione sul server.

16
00:01:15,460 --> 00:01:21,670
Ad esempio, potremmo aver fatto qualche calcolo importante e potremmo volerlo fermare in modo

17
00:01:22,060 --> 00:01:28,720
esplicito in modo che il trucco possa terminare in modo aggraziato anziché interromperli bruscamente durante

18
00:01:28,720 --> 00:01:29,840
la competizione.

19
00:01:31,420 --> 00:01:38,650
Il dollaro non fornisce un meccanismo per costringerlo a fermare la classe di camion che non ha il loro

20
00:01:38,990 --> 00:01:45,100
nome per fermare forzatamente una minaccia, ma è stata duplicata insieme ad alcuni altri mandati come

21
00:01:45,220 --> 00:01:46,580
sospendere e riprendere.

22
00:01:46,630 --> 00:01:54,310
Puoi guardare le API delle classi per informazioni su questi metodi, quindi Dalma fornisce invece un'interruzione che

23
00:01:54,520 --> 00:02:01,040
è un meccanismo aziendale per richiedere un thread per fermare la distruzione dell'acqua.

24
00:02:01,240 --> 00:02:09,450
Quindi la prossima domanda sarebbe perché Java consente un meccanismo aziendale piuttosto che forzarlo a smettere di forzarlo a

25
00:02:09,630 --> 00:02:15,060
interrompere immediatamente può lasciare qualsiasi oggetto condiviso in uno stato incoerente.

26
00:02:16,370 --> 00:02:22,850
Quindi in modo cooperativo permetterebbe al thread di destinazione di eseguire qualsiasi operazione di pulizia prima del dominio.

27
00:02:22,850 --> 00:02:26,620
OK, quindi era un'altra minaccia da porre fine in modo aggraziato.

28
00:02:27,030 --> 00:02:32,380
Generalmente tali operazioni di pulizia vengono spesso ignorate, il che può portare a seri problemi.

29
00:02:34,210 --> 00:02:40,060
Puoi richiamare questo esempio dalla nostra lezione sulle variabili volatili in cui abbiamo usato una variabile booleana

30
00:02:40,060 --> 00:02:41,680
volatile e la interrompiamo.

31
00:02:42,700 --> 00:02:48,010
Qui all'interno del main stiamo creando un nuovo thread con alcuni bleep e del testo

32
00:02:48,610 --> 00:02:54,700
in un istante per tutto il ciclo while iterating One-Stop è impostato su true dal thread principale che viene

33
00:02:54,700 --> 00:03:00,050
eseguito dopo circa 1 secondo e con quello i minuti di Treptow come corre al completamento.

34
00:03:00,100 --> 00:03:01,970
Quindi questo è un modo per fermarlo correttamente.

35
00:03:02,080 --> 00:03:05,280
Tuttavia questo potrebbe non essere applicabile in alcuni scenari.

36
00:03:05,320 --> 00:03:12,400
Ad esempio, se un thread entra in stati come valutazione o valutazione temporizzata o blocco double in posizione

37
00:03:12,460 --> 00:03:19,390
di metodi di blocco come vaid sleep o Giant, in realtà non sanno quando torneranno nello stato

38
00:03:19,390 --> 00:03:20,530
di esecuzione.

39
00:03:20,660 --> 00:03:29,130
Deselezionato il flag di stop per l'interruzione di tali scenari è la soluzione o non guardiamo all'interruzione.

40
00:03:29,160 --> 00:03:32,840
Ogni thread ha lo stato di Boullion interrotto.

41
00:03:32,970 --> 00:03:37,430
Solo i caratteri di default sotto la clausola della minaccia hanno questo metodo.

42
00:03:37,430 --> 00:03:44,560
I chiamanti finivano sul lato libero di questo metodo su un thread di quanto lo stato di quel

43
00:03:44,600 --> 00:03:52,120
thread sarebbe stato impostato e fondamentalmente è un segnale al thread per interrompere ciò che sta facendo a suo piacimento.

44
00:03:52,200 --> 00:03:59,270
Cioè dipende dal thread su come si intreccia a questa richiesta non bloccando che è come dormire o

45
00:03:59,330 --> 00:04:05,490
leggere provare a rilevare quando un thread è stato interrotto e il Kreiger ritorna.

46
00:04:05,990 --> 00:04:12,060
Sostanzialmente rispondono cancellando l'interruzione del suo stato che sta ripristinando l'intero approccio ai

47
00:04:12,090 --> 00:04:13,320
valori predefiniti.

48
00:04:13,440 --> 00:04:16,490
Anche lanciando un'eccezione interrotta.

49
00:04:16,520 --> 00:04:22,820
Si può ricordare che nelle nostre dimostrazioni il metodo di blocco allegato chiama come il sonno è grande

50
00:04:22,880 --> 00:04:27,470
con Tricot con il codice di gestione delle eccezioni in un'eccezione intrepida.

51
00:04:28,530 --> 00:04:34,990
Quindi, se lo stato è stato impostato su true sul metodo target, eseguito un metodo di blocco, genera un'eccezione

52
00:04:34,990 --> 00:04:38,520
di interrupt dopo aver reimpostato il flag di stato.

53
00:04:38,650 --> 00:04:39,700
Falso.

54
00:04:39,730 --> 00:04:46,990
Allo stesso modo, anche se un thread è già in stati come la lettura o la scrittura o il

55
00:04:46,990 --> 00:04:53,650
blocco risponderà reimpostando il flag di stato e lanciando l'eccezione che indica che è stata interrotta.

56
00:04:53,770 --> 00:04:59,630
Il blocco catch che gestisce l'interrupt fa eccezione a qualsiasi ripulitura o semplicemente sa che

57
00:04:59,630 --> 00:05:06,170
non vi è alcuna garanzia sulla velocità con cui un thread rileva un'interruzione, sebbene in pratica ciò avvenga

58
00:05:06,170 --> 00:05:07,010
abbastanza velocemente.

59
00:05:08,560 --> 00:05:14,080
Ora se il pod che il tuo programma prende non comporta un'operazione

60
00:05:14,080 --> 00:05:20,080
di blocco allora potresti fare qualcosa del genere per terminare il ben condizionato invocare il

61
00:05:20,080 --> 00:05:29,010
metodo IIS interrotto che è anche dalla terza classe e lo restituirebbe attraverso il prestigioso su ecco un supplente da interrompere ma

62
00:05:29,040 --> 00:05:36,130
quello appena sostituito viene interrotto, che è anche un adulto di questo dagli Stati Uniti e questo.

63
00:05:36,160 --> 00:05:42,350
Questo cancella lo stato interrotto e restituisce il valore precedente del flag di stato.

64
00:05:42,850 --> 00:05:49,330
Se il metodo restituisce true, il ciclo non dominerebbe quell'interrupt che è l'unico metodo che può essere

65
00:05:49,330 --> 00:05:52,540
utilizzato per reimpostare il flag di stato dell'interrupt.

66
00:05:54,380 --> 00:06:02,020
Da notare infine che se si blocca a causa dell'uso di stream my walk allora quel particolare thread è ininterrotto ciò che

67
00:06:03,080 --> 00:06:03,650
significa.

68
00:06:03,660 --> 00:06:11,780
Come se il thread fosse in attesa di alcuni dati dalla sorgente, quel thread è ininterrotto su come le

69
00:06:11,780 --> 00:06:17,660
directory stanno lavorando per questo e il problema è che dobbiamo chiudere il

70
00:06:17,660 --> 00:06:20,530
flusso e ciò farebbe generare un'eccezione.

71
00:06:20,620 --> 00:06:23,490
Ecco come eravamo nel thread.

72
00:06:23,500 --> 00:06:27,830
Presto lo vedremo qui da qui.

73
00:06:27,970 --> 00:06:34,360
Allo stesso modo, se una minaccia viene portata a un aspetto intrinseco che è o un metodo

74
00:06:34,360 --> 00:06:41,510
sincronizzato o un blocco sincronizzato, ancora una volta la minaccia è ininterrotta c'è una vista alternativa che puoi usare

75
00:06:41,510 --> 00:06:48,410
qualcosa chiamata blocchi espliciti e che è in attesa su di essi può essere interrotta con uno sguardo

76
00:06:48,420 --> 00:06:56,410
blocchi espliciti per infine se un terzo bloccato a causa dell'uso di e cito piuttosto che il mio lavoro in streaming

77
00:06:56,440 --> 00:06:58,580
allora quel thread è interrompibile.

78
00:06:59,120 --> 00:07:05,830
Ora andiamo avanti e guardiamo all'interruzione in azione ok per questo momento.

79
00:07:05,910 --> 00:07:10,730
Iniziamo guardando un esempio molto semplice di utilizzo del metodo di interrupt.

80
00:07:10,830 --> 00:07:12,570
OK, quindi vedremo due programmi.

81
00:07:12,570 --> 00:07:18,080
Il primo sarebbe un programma molto semplice sul secondo esempio sarebbe un po 'più complicato.

82
00:07:18,330 --> 00:07:22,910
Quindi per il primo programma stiamo guardando lo stesso esempio che abbiamo visto in precedenza.

83
00:07:22,920 --> 00:07:29,760
Si chiama My First Class, una delle prime classi che abbiamo portato qui in questa particolare

84
00:07:29,760 --> 00:07:30,260
classe.

85
00:07:30,300 --> 00:07:35,940
Tutto ciò che sta facendo è che il metodo principale è unbid nel metodo main che stiamo generando un nuovo thread

86
00:07:35,940 --> 00:07:40,820
e che la variabile è chiamata esso stesso e che stiamo iniziando quella discussione in quel thread.

87
00:07:40,830 --> 00:07:45,870
Tutto quello che stiamo facendo è che stiamo invocando la testa del parafango e altri carichi che vengono fatti invocando un

88
00:07:45,870 --> 00:07:46,620
metodo chiamato più.

89
00:07:46,890 --> 00:07:49,310
Ma non è rilevante qui per questa demo.

90
00:07:49,830 --> 00:07:55,420
E il metodo principale sarebbe quindi dormire per tre secondi e stampare questo messaggio mi ha preso dentro.

91
00:07:55,860 --> 00:08:02,430
Quindi quello che faremo è copiare questo codice, stiamo dormendo per tre secondi e faremo in modo

92
00:08:02,430 --> 00:08:05,640
che l'altro thread dorma per circa nove secondi.

93
00:08:05,640 --> 00:08:05,900
OK.

94
00:08:05,910 --> 00:08:07,760
Quindi il principale sta dormendo per tre secondi.

95
00:08:07,770 --> 00:08:13,800
L'altro thread sta cercando 9 secondi e quindi dal thread principale invocheremo il metodo di interrupt su questa

96
00:08:13,810 --> 00:08:17,670
variabile in modo corretto, in modo tale che saremo così addormentati.

97
00:08:17,670 --> 00:08:23,330
Il terzo è nello stato di sonno che è una sorta di stato di attesa e quando invochiamo l'accusa

98
00:08:23,400 --> 00:08:26,830
che dovrebbe interrompere quella particolare data o la cronologia degli interrupt.

99
00:08:27,090 --> 00:08:28,240
Quindi andiamo avanti e farlo.

100
00:08:28,260 --> 00:08:34,380
Quindi fammi copiare questo e quello è inserito qui nella questione della corsa.

101
00:08:35,710 --> 00:08:42,120
Facciamo questo nove.

102
00:08:42,150 --> 00:08:43,200
Quindi nel blocco catch.

103
00:08:43,220 --> 00:08:45,400
No, è per diffondere questa affermazione interrotta.

104
00:08:45,720 --> 00:08:45,960
OK.

105
00:08:45,960 --> 00:08:48,870
Ora passiamo al metodo principale.

106
00:08:48,910 --> 00:08:52,990
Quindi, dopo aver dormito per tre secondi, percorriamolo.

107
00:08:53,000 --> 00:08:54,460
Questo è il nome della variabile qui.

108
00:08:56,330 --> 00:08:58,400
E matti nel metodo dell'interrupt.

109
00:08:58,430 --> 00:09:01,720
E puoi anche vedere che l'altro dilettante ha interrotto un allentamento.

110
00:09:01,910 --> 00:09:04,270
Ma questo è il problema medico nel mio libro su questo.

111
00:09:04,340 --> 00:09:06,660
Quindi l'interprete ci porta a.

112
00:09:07,160 --> 00:09:08,550
OK.

113
00:09:08,690 --> 00:09:16,200
Quindi andiamo avanti e gestiamo questo.

114
00:09:16,220 --> 00:09:21,200
Quindi, come puoi vedere dopo circa tre secondi, il thread principale sta invocando questo interrupt.

115
00:09:21,450 --> 00:09:23,850
E il secondo thread è stato interrotto.

116
00:09:23,960 --> 00:09:26,850
OK, quindi stiamo stampando il messaggio interrotto.

117
00:09:26,930 --> 00:09:28,500
Quindi questo è il metodo dell'interrupt.

118
00:09:28,640 --> 00:09:30,660
Quindi questo è il primo programma.

119
00:09:30,650 --> 00:09:33,980
Ora diamo un'occhiata a un altro programma qui.

120
00:09:33,980 --> 00:09:38,850
Si chiama noi vate non combattere ma l'interruzione incompleta.

121
00:09:39,050 --> 00:09:45,960
Quindi è fondamentalmente un'estensione del metodo degli indici di notifica di velocità che abbiamo visto in precedenza.

122
00:09:46,160 --> 00:09:46,980
E B come.

123
00:09:46,990 --> 00:09:47,940
Interruzione qui.

124
00:09:47,960 --> 00:09:54,460
Quindi abbiamo incorporato l'interruzione ma la chiamo incompleta perché qui c'è qualche limite.

125
00:09:54,650 --> 00:09:55,200
OK.

126
00:09:55,280 --> 00:09:57,800
Per questo motivo lo chiamo incompleto.

127
00:09:58,040 --> 00:10:04,580
E per risolvere il problema potremmo dover guardare le serrature esplicite che sono l'argomento della prossima lezione.

128
00:10:04,610 --> 00:10:10,790
Ecco perché è chiamato come incompleto e più simile a quando possiamo anche avere un incarico in merito su

129
00:10:10,800 --> 00:10:12,770
questo in cui puoi effettivamente correggerlo.

130
00:10:12,950 --> 00:10:14,180
Ma lo guardi più tardi.

131
00:10:14,180 --> 00:10:17,990
Per ora si chiama solo interruzione incompleta Ecevit.

132
00:10:18,080 --> 00:10:22,830
Quindi andiamo avanti e vediamo quali cambiamenti sono stati fatti in questo programma che era in origine

133
00:10:22,850 --> 00:10:25,280
indice di notifica vago o il programma stesso.

134
00:10:25,280 --> 00:10:26,910
OK.

135
00:10:27,160 --> 00:10:33,260
Sai, come discusso nella lezione, vogliamo interrompere quella discussione se impiega troppo tempo.

136
00:10:33,310 --> 00:10:37,780
Non leggere una pagina se ricordi che era uno degli esempi di cui avevamo bisogno.

137
00:10:37,810 --> 00:10:39,270
Perché vogliamo fermare una minaccia.

138
00:10:39,520 --> 00:10:44,380
E se ricordi che non conosciamo quella traccia che è responsabile per il download

139
00:10:44,380 --> 00:10:50,510
della pagina web e abbiamo anche la minaccia degli indicizzatori che è giusto indicizzare la pagina Web scaricata.

140
00:10:50,570 --> 00:10:56,580
Quindi questo è il modo e il modo in cui il metodo principale che sta invocando questo metodo chiamato ask go.

141
00:10:56,930 --> 00:11:02,600
E nel metodo, se ricordi che stavamo creando il thread del downloader, il thread dell'indicizzatore

142
00:11:02,600 --> 00:11:08,870
e stavamo iterando attraverso tutti i link web e stavamo creando per ognuna delle cose che stiamo creando

143
00:11:08,870 --> 00:11:10,020
queste due tracce.

144
00:11:10,190 --> 00:11:17,630
Ora in aggiunta a ciò che stiamo facendo, come sapete, vogliamo archiviare queste tracce in modo che possiamo in

145
00:11:17,630 --> 00:11:18,970
seguito richiamare l'interprete.

146
00:11:18,980 --> 00:11:21,780
Quindi per la memorizzazione vogliamo archiviarli in una struttura dati.

147
00:11:21,860 --> 00:11:23,170
Quindi abbiamo un idealista.

148
00:11:23,270 --> 00:11:25,300
Così ho creato altre due liste.

149
00:11:25,430 --> 00:11:30,200
Uno è qualificante per il downloader tribalista e l'altro è indicizzatore raddrizzato.

150
00:11:30,260 --> 00:11:31,510
Quindi questi sono infiniti.

151
00:11:31,520 --> 00:11:38,570
Fondamentalmente memorizzano solo i brani scaricati su tracce di un mixer che l'elenco memorizzerà sulle tracce del mixer

152
00:11:39,050 --> 00:11:39,580
qui.

153
00:11:39,580 --> 00:11:42,720
Inoltre, ognuna di queste due teste viene data in.

154
00:11:42,860 --> 00:11:48,170
Stiamo solo dicendo di non collegare quell'ID dal thread del downloader che stiamo dicendo di non

155
00:11:48,170 --> 00:11:55,020
ordinare traccia con ID e stiamo semplicemente dando il nome del rebeling qui per far funzionare Heideggerian per ottenere il metodo ID.

156
00:11:55,220 --> 00:12:00,460
Questo sarebbe il nome della traccia donatrice e stiamo facendo lo stesso con il trattore indicizzatore.

157
00:12:00,860 --> 00:12:03,080
Quindi quelle sono le due tracce.

158
00:12:03,080 --> 00:12:06,660
Quindi, fai attenzione perché sai che molti dei miei amici sono morti.

159
00:12:06,670 --> 00:12:08,770
Quindi, fai più attenzione qui.

160
00:12:09,040 --> 00:12:16,190
OK, quindi tutto ciò che stiamo facendo è aggiungere queste tracce a qualche malattia e dopo un arrivederci OK stiamo

161
00:12:16,190 --> 00:12:23,140
dormendo per un secondo e in un secondo ci aspettiamo che la traccia finisca il lavoro di download.

162
00:12:23,210 --> 00:12:29,120
Ora se non scarica se una particolare traccia non su Rodden, dobbiamo interromperla su quel particolare pezzo

163
00:12:29,120 --> 00:12:31,100
di codice come scritto qui.

164
00:12:31,100 --> 00:12:34,310
Quindi stiamo iterando attraverso il downloader provato benedetto.

165
00:12:34,440 --> 00:12:34,830
Va bene.

166
00:12:34,850 --> 00:12:40,930
E poi ci stiamo avvicinando a un thread e tu sai in una determinata iterazione che stiamo controllando se è vivo.

167
00:12:41,300 --> 00:12:47,850
Quindi c'è questo è un limite e ritornerà VERO dopo che un lanciatore non ha ancora terminato il suo compito se non

168
00:12:48,290 --> 00:12:51,370
è stato eseguito fino al completamento, quindi restituirà true.

169
00:12:51,590 --> 00:12:54,490
Quindi in tal caso vogliamo interrompere questa minaccia.

170
00:12:54,530 --> 00:13:00,740
Tuttavia, invece di interrompere la ciambella al terzo posto, si interromperà effettivamente la

171
00:13:00,740 --> 00:13:06,530
lettura dell'intercetta corrispondente e questo in realtà interromperà l'interruzione dell'altro thread.

172
00:13:06,540 --> 00:13:12,050
No, non conosco il terzo, sappiamo che non possiamo interromperlo perché sai che se ti

173
00:13:12,050 --> 00:13:19,040
ricordi dalla lezione hai detto che se la minaccia utilizza il flusso la mia volontà è ininterrottabile e l'unico modo

174
00:13:19,040 --> 00:13:22,330
in cui possiamo interromperlo è chiudendo il ruscello.

175
00:13:22,520 --> 00:13:28,460
E questo è quello che sta succedendo qui perché stiamo usando lo streaming per scaricare la pagina.

176
00:13:28,560 --> 00:13:32,740
E quindi non possiamo interromperlo a meno che non ci avviciniamo al flusso stesso.

177
00:13:33,080 --> 00:13:35,370
Ecco cosa stiamo cercando di fare qui.

178
00:13:35,530 --> 00:13:36,230
Così.

179
00:13:36,290 --> 00:13:38,760
Quindi l'indice viene interrotto.

180
00:13:39,150 --> 00:13:44,220
Ma per leggere abbiamo alcuni cambiamenti qui.

181
00:13:44,550 --> 00:13:44,790
OK.

182
00:13:44,800 --> 00:13:48,870
Così prima avevamo chiamato questo metodo chiamato hat d'Agde su Lord.

183
00:13:48,880 --> 00:13:53,510
E stavamo passando a dove sei ora abbiamo bisogno di accedere al flusso di input.

184
00:13:53,530 --> 00:13:59,230
OK, questo è il donatore che imita Non so che la minaccia e B hanno bisogno di accedere al flusso di input

185
00:13:59,260 --> 00:14:00,850
in modo che possiamo effettivamente chiuderlo.

186
00:14:01,000 --> 00:14:01,430
OK.

187
00:14:01,570 --> 00:14:03,780
Ecco perché è stato scritto un nuovo metodo.

188
00:14:03,790 --> 00:14:10,030
Cardus riceve il flusso di input nella cronologia e questo è già disponibile nella sezione delle risorse.

189
00:14:10,060 --> 00:14:17,260
Quindi il flusso di input è qui e quindi abbiamo bisogno di chiudere il flusso di input e per questo abbiamo bisogno di usare

190
00:14:17,260 --> 00:14:18,450
un thread diverso.

191
00:14:18,460 --> 00:14:20,690
Ok, quindi dobbiamo generare un nuovo thread.

192
00:14:20,860 --> 00:14:26,690
Quindi all'interno di questo thread non omicidio otteniamo quello che stiamo facendo è qui stiamo creando un nuovo thread.

193
00:14:26,830 --> 00:14:27,160
OK.

194
00:14:27,190 --> 00:14:31,260
E questo è principalmente responsabile della chiusura del flusso di input.

195
00:14:31,480 --> 00:14:33,470
Quindi stai spendendo nel tuo thread qui.

196
00:14:33,570 --> 00:14:37,100
Unidas e lo chiamiamo come B. G. filo.

197
00:14:37,240 --> 00:14:45,400
OK perché è un thread bagong non obbligatorio e importa che vogliamo chiudere quel particolare flusso di input in base ad

198
00:14:45,400 --> 00:14:46,320
alcune condizioni.

199
00:14:46,450 --> 00:14:53,680
OK, quindi abbiamo una politica di cancellazione qui e la politica è quella dopo circa 1 secondo in questo particolare thread

200
00:14:54,160 --> 00:14:58,020
se non termina l'attività che abbiamo bisogno di un più vicino.

201
00:14:58,210 --> 00:14:59,700
Quindi questa è la politica.

202
00:14:59,840 --> 00:15:06,580
Ora, dopo ancora una volta, dobbiamo sapere in qualche modo di creare questo thread se è ancora in corso il download

203
00:15:06,580 --> 00:15:12,820
non è ancora completo, quindi la minaccia dovrebbe terminare e durante il processo deve richiamare il metodo close sul

204
00:15:12,820 --> 00:15:16,240
flusso di input del flusso di input è fondamentalmente.

205
00:15:16,300 --> 00:15:18,370
E così da quello.

206
00:15:18,440 --> 00:15:24,640
OK, abbiamo anche introdotto una nuova variabile all'interno dell'oggetto inghiottito.

207
00:15:24,700 --> 00:15:25,760
Puoi andare qui.

208
00:15:26,170 --> 00:15:27,070
OK, eccolo qui.

209
00:15:27,100 --> 00:15:31,140
Quindi è praticamente quello che succede quando ti fermi su una griglia.

210
00:15:31,150 --> 00:15:37,410
Se impostiamo lo stop su due significa che il thread in background non sa che il thread deve essere fermato.

211
00:15:37,700 --> 00:15:37,980
OK.

212
00:15:37,990 --> 00:15:41,080
E ciò avviene chiudendo il flusso di input.

213
00:15:41,110 --> 00:15:44,510
Quindi questo è un segnale per quel thread stop.

214
00:15:44,530 --> 00:15:46,260
Quindi questa è l'intenzione principale qui.

215
00:15:46,520 --> 00:15:46,800
OK.

216
00:15:46,810 --> 00:15:50,760
Ora se l'E-Stop se restituisce false, allora che cosa.

217
00:15:50,800 --> 00:15:55,690
Che cosa fa questo thread di Granter è solo un salto per un secondo e poi si sveglia e ancora

218
00:15:55,690 --> 00:15:57,020
una volta a ogni ticchettio.

219
00:15:57,340 --> 00:16:00,870
Ora se questa variabile è impostata su true, verrà impostata su true.

220
00:16:01,030 --> 00:16:05,900
Quindi mostrerebbe questo aspetto e chiuderebbe la stringa di input.

221
00:16:05,920 --> 00:16:08,220
Ora andiamo avanti in questa materia.

222
00:16:08,710 --> 00:16:13,300
Quindi questa è ancora la classe di ordine e qui abbiamo la questione del download.

223
00:16:13,300 --> 00:16:21,140
Così prima avevamo sentito la materia che stava prendendo un pedaggio da una pagina, ma ora sta prendendo un flusso di input.

224
00:16:21,580 --> 00:16:23,080
Quindi è un motore sovraccarico.

225
00:16:23,230 --> 00:16:29,090
E così abbiamo ottenuto e una volta o non ce ne accorgiamo, per cercare la pagina Yamal attaccata qui.

226
00:16:29,530 --> 00:16:32,910
OK ora se quel proprietario completa in un modo normale.

227
00:16:33,050 --> 00:16:36,950
Ma in tal caso, in quel caso, vogliamo interrompere la B. G. minaccia giusta

228
00:16:36,970 --> 00:16:42,040
Altrimenti questo thread BT sarebbe ancora in esecuzione in background e vogliamo chiuderlo.

229
00:16:42,200 --> 00:16:45,340
E questo non è solo non notificare tutto ciò che conta e il downloader.

230
00:16:45,760 --> 00:16:50,660
E abbiamo anche come l'indice Armathwaite si guadagna il collo, quindi stiamo anche aspettando qui.

231
00:16:50,980 --> 00:16:57,740
OK quindi alla fine Metzer motard ora abbiamo questo blocco catch che interrompe tutte quell'eccezione

232
00:16:57,740 --> 00:17:05,010
perché se si richiama se qui nel terzo obiettivo stiamo effettivamente invocando il metodo dell'interrupt sul downloader.

233
00:17:05,270 --> 00:17:06,430
Il terzo è vivo.

234
00:17:06,700 --> 00:17:12,860
OK dopo un secondo, stiamo invocando il metodo di interrupt sull'interrupt che non lo stiamo facendo su non

235
00:17:12,860 --> 00:17:13,900
lo so.

236
00:17:13,940 --> 00:17:19,700
Giusto ma l'interruzione che non si trova nell'interruzione fa male perché interrompono e scaricano terzo sono connessi.

237
00:17:19,730 --> 00:17:19,990
Destra.

238
00:17:20,050 --> 00:17:25,850
Stanno cooperando arroccati sulla fine del terzo sarà effettivamente interrotto.

239
00:17:25,970 --> 00:17:33,110
E se viene interrotto, questo è il blocco catch del thread interrotto e all'interno del blocco catch stiamo facendo

240
00:17:33,110 --> 00:17:39,530
qualche operazione di cleanup e l'operazione di cleanup non è altro che altro che impostare questo stato

241
00:17:39,530 --> 00:17:41,730
di stop per la troupe.

242
00:17:41,840 --> 00:17:48,070
E se si imposta lo stato per equipaggio giù nel thread del downloader abbiamo il thread in background su quello.

243
00:17:48,070 --> 00:17:54,590
Controlleremo lo stato se il flag stop è vero e chiuderà il flusso di input e non appena

244
00:17:54,590 --> 00:17:56,450
chiude il flusso di input.

245
00:17:56,450 --> 00:18:04,650
Quindi il principale Quindi il download in seguito, che è in realtà nella questione del download.

246
00:18:04,710 --> 00:18:05,000
OK.

247
00:18:05,040 --> 00:18:13,240
Sta aspettando lì i dati che genereranno un'eccezione e l'eccezione è qui e stiamo stampando questo messaggio dicendo

248
00:18:13,240 --> 00:18:16,570
che la pagina non può essere scaricata.

249
00:18:16,750 --> 00:18:17,190
OK.

250
00:18:17,190 --> 00:18:23,590
E così stiamo dominando il flusso, le ragazze che guardano sono indirettamente interrotte.

251
00:18:24,070 --> 00:18:26,820
Quindi questo è quello ora.

252
00:18:27,040 --> 00:18:30,830
Quindi penso che possiamo andare avanti e gestirlo con questo metodo.

253
00:18:34,320 --> 00:18:35,490
Quindi abbiamo finito con quello.

254
00:18:35,610 --> 00:18:37,910
Quindi diamo un'occhiata a questo qui.

255
00:18:38,100 --> 00:18:44,880
Quindi l'altro thread sta provando a scaricare queste pagine e una delle pagine è in realtà completata

256
00:18:44,970 --> 00:18:49,090
fino al 2003 ed è stata indicizzata anche OK.

257
00:18:49,130 --> 00:18:56,420
Quindi il B. G. filo perché anche dopo il B. G. thread è anche interrotto

258
00:18:56,540 --> 00:19:02,730
perché anche se siamo quando abbiamo finito di scaricare la pagina, stiamo ancora chiamando dopo averlo scaricato con successo.

259
00:19:02,730 --> 00:19:08,080
Siamo ancora in Wilkin il metodo dell'interrupt perché vogliamo anche che questo thread sia terminato.

260
00:19:08,150 --> 00:19:13,460
OK, non abbiamo più bisogno di questo, quindi possiamo terminarlo anche dopo aver scaricato con successo la pagina web

261
00:19:13,460 --> 00:19:14,380
entro un secondo.

262
00:19:14,420 --> 00:19:20,250
Quindi qui stiamo dicendo che il tempo è scaduto, il che significa che un secondo è passato, ci

263
00:19:20,300 --> 00:19:23,640
sono alcune tracce che sai che sono ancora acto.

264
00:19:23,720 --> 00:19:31,220
Quindi, ciò significa che questi tre sono 2000 2001 e 2002, quindi in realtà qui sai che non potevano

265
00:19:31,220 --> 00:19:37,970
nemmeno entrare nell'indice o nel thread che stanno aspettando qui sul blocco sincronizzato che è un blocco

266
00:19:37,970 --> 00:19:38,600
intrinseco.

267
00:19:38,870 --> 00:19:45,500
E anche se l'interesse è stato invocato Sappiamo che nella conferenza, se ricordate, abbiamo detto

268
00:19:46,070 --> 00:19:53,990
che qualsiasi thread in attesa su un blocco intrinseco che sarebbe un orologio sincronizzato e che è lì

269
00:19:54,100 --> 00:19:55,470
sarebbe stato ininterrotto.

270
00:19:55,540 --> 00:19:55,840
OK.

271
00:19:55,860 --> 00:19:59,330
Ci sarebbe ancora qui ad aspettare nel senso bloccato dichiarato.

272
00:19:59,420 --> 00:19:59,660
OK.

273
00:19:59,680 --> 00:20:00,820
Quello ininterrotto.

274
00:20:01,040 --> 00:20:07,430
Quindi ci sono 330 che sono tre indicizzatori che stanno aspettando qui, ma ci sono interpreti corrispondenti che

275
00:20:07,460 --> 00:20:08,750
hanno già lavorato.

276
00:20:08,810 --> 00:20:10,150
Ma stiamo ancora aspettando qui.

277
00:20:10,160 --> 00:20:13,070
Quindi questo è il limite di questo approccio.

278
00:20:13,080 --> 00:20:14,320
Ben bene operativo qui.

279
00:20:14,600 --> 00:20:21,290
Quindi, anche dopo che sono lì, le tracce dei downloader continuano ancora sono questi tre thread

280
00:20:21,590 --> 00:20:28,520
e stiamo vedendo che Pluto è su $ 1 come completo e poi viene interrotto e

281
00:20:28,760 --> 00:20:34,480
quindi è indicizzato qui perché di Warga lo notificherà in seguito uscirebbe.

282
00:20:34,730 --> 00:20:43,770
So che sì, perché era sulla pagina e qui nella lettura inesperta dei rapporti che stiamo avendo questa condizione

283
00:20:43,770 --> 00:20:44,740
vile.

284
00:20:44,820 --> 00:20:45,090
OK.

285
00:20:45,100 --> 00:20:50,780
E se la testa di malapit non è uguale a null e quindi B stai indicizzando questa pagina

286
00:20:51,220 --> 00:20:55,620
in modo che, anche se il tempo è passato, è trascorso un secondo.

287
00:20:55,800 --> 00:20:58,270
Siamo ancora su tutte e tre le pagine qui.

288
00:20:58,970 --> 00:21:00,460
OK, questo è il problema

289
00:21:00,550 --> 00:21:08,690
Questo perché tutto il trattamento è ciò che in realtà sta aspettando qui, è un OK, quindi questa è la seconda limitazione che

290
00:21:08,690 --> 00:21:10,760
non ha alcun effetto qui.

291
00:21:10,820 --> 00:21:12,580
Lasciami correre ancora una volta.

292
00:21:13,800 --> 00:21:15,780
Sai che questo esempio è buono.

293
00:21:15,850 --> 00:21:21,990
Penso che questo sia molto meglio perché qui stiamo scaricando ma, se puoi vedere qui, stiamo dicendo che

294
00:21:21,990 --> 00:21:27,320
queste due tracce sono in realtà queste affermazioni che vengono stampate dalla prossima Internet.

295
00:21:27,420 --> 00:21:30,740
E qui stiamo vedendo Tucows e non scaricati sotto dissipazione.

296
00:21:30,940 --> 00:21:36,880
OK, quindi queste due tracce del 2001 2002 sono state prese a calci prima che il corrispondente downloader fosse troncato.

297
00:21:37,140 --> 00:21:44,220
OK, così che è entrato nel sincronizzato e nel 2000 o 2001 2002 stiamo vedendo Nakia scaricato in giornata andando

298
00:21:44,240 --> 00:21:46,280
allo stato di attesa qui.

299
00:21:46,320 --> 00:21:48,130
Ora torniamo qui.

300
00:21:49,840 --> 00:21:53,730
Il tempo è scaduto e uno di questi era il 2000.

301
00:21:54,040 --> 00:21:58,720
Quindi per il 2000 il download è stato completato.

302
00:21:59,050 --> 00:22:05,440
Ma prima di lavorare per notificare tutto Xserve perché il metodo di interrupt è già stato chiamato e sotto il

303
00:22:06,290 --> 00:22:11,220
documento con la I. D. Tozan è all'interno di questo otto mentore che vi sta violentando.

304
00:22:11,590 --> 00:22:15,770
Quindi a causa di ciò, Richard ular finirà in realtà solo.

305
00:22:16,200 --> 00:22:17,480
E a causa di ciò.

306
00:22:17,620 --> 00:22:24,040
Quindi questa pagina questa dichiarazione non verrà eseguita e andrà in questa complessa eccezione e sta

307
00:22:24,040 --> 00:22:26,580
eseguendo questa operazione di pulizia.

308
00:22:26,620 --> 00:22:26,970
OK.

309
00:22:27,010 --> 00:22:30,130
Questo è il mio gusto per il mixer interrotto qui.

310
00:22:30,460 --> 00:22:37,550
Ed è l'operazione di pulizia è quella di chiamare questo metodo di arresto, tranne smettere di ferire la verità.

311
00:22:37,810 --> 00:22:44,070
Così facendo, in realtà chiuderà l'altro terzo del flusso di input.

312
00:22:44,110 --> 00:22:46,550
Quindi questo è ciò che sta accadendo ma lontano.

313
00:22:47,020 --> 00:22:48,700
Ma cosa sta succedendo qui.

314
00:22:48,730 --> 00:22:57,010
Dopo un secondo anche il thread del downloader sta scaricando ha anche finito di scaricare la pagina contemporaneamente.

315
00:22:57,130 --> 00:23:01,790
Quindi è solo un po 'difficile simularlo se cade se il terzo è in attesa.

316
00:23:01,800 --> 00:23:05,810
È quello il thread corrispondente che 2000 o ha deciso cosa succede.

317
00:23:05,940 --> 00:23:11,950
Se ti aspettava per qualche altro secondo, avremmo potuto vedere che dove il flusso di input è

318
00:23:11,950 --> 00:23:15,120
chiuso e questo costringerebbe la minaccia a entrare.

319
00:23:15,490 --> 00:23:20,920
Quindi siamo un po 'difficili da condividere qui perché queste sono tutte pagine web

320
00:23:20,920 --> 00:23:25,330
e non abbiamo il controllo su come sai come risponderanno.

321
00:23:25,330 --> 00:23:28,060
Quindi comunque penso che tu abbia avuto un'idea su questo.

322
00:23:28,060 --> 00:23:32,390
Puoi anche dare un'occhiata a questo programma che sarà nella sezione delle risorse.

323
00:23:32,410 --> 00:23:37,900
Quindi il problema che abbiamo visto prima era che i camion stavano effettivamente aspettando qui e stavano

324
00:23:37,900 --> 00:23:39,650
aspettando qui il giorno dopo.

325
00:23:39,970 --> 00:23:42,170
Non siamo in grado di interromperli.

326
00:23:42,290 --> 00:23:46,030
Quindi se vuoi farlo allora dobbiamo usare dei lock espliciti su questo.

327
00:23:46,030 --> 00:23:49,100
Vedremo nella prossima lezione è per ora.

328
00:23:49,300 --> 00:23:50,790
Grazie e felice Cody.
