1
00:00:02,160 --> 00:00:07,950
Salve, questo è che non vogliono sapere, non dare un'occhiata ad alcune regole di buone pratiche quando si

2
00:00:07,950 --> 00:00:09,990
tratta di utilizzare la sincronizzazione.

3
00:00:09,990 --> 00:00:12,920
Molte delle soluzioni provengono dall'etica del manuale.

4
00:00:14,740 --> 00:00:17,780
Abbiamo già discusso questa regola, ma è molto importante.

5
00:00:17,930 --> 00:00:20,200
Quindi discutiamone ancora una volta.

6
00:00:20,220 --> 00:00:24,110
Le regole sono che dobbiamo usare la sincronizzazione ovunque.

7
00:00:24,150 --> 00:00:31,070
La variabile condivisa notabile è giusta e abbiamo anche analizzato questo esempio di conto bancario che coinvolge

8
00:00:31,400 --> 00:00:38,810
John Anita, che condivide un singolo conto bancario che ha discusso le conseguenze rende il Dolma sincronizzato ma non

9
00:00:38,910 --> 00:00:45,510
l'equilibrio, ma ha detto che la minaccia di Mxit di John potrebbe fare di Dalma una

10
00:00:45,550 --> 00:00:46,820
buona immagine.

11
00:00:46,880 --> 00:00:54,140
Ci sarà New Balance Hammil, tuttavia Anita che accede successivamente al metodo di bilanciamento potrebbe Sancy il valore

12
00:00:54,600 --> 00:01:02,170
di sbilanciamento in quanto un buon bilanciamento non è sincronizzato, quindi c'è una mancanza di coordinamento e di quale

13
00:01:02,490 --> 00:01:09,040
scenario abbiamo bisogno per garantire che stiamo sincronizzando ogni dove il la variabile di equilibrio

14
00:01:09,040 --> 00:01:09,940
viene utilizzata.

15
00:01:10,370 --> 00:01:15,000
Quindi, a causa di ciò il metodo di bilanciamento deve essere sincronizzato come vediamo qui.

16
00:01:16,880 --> 00:01:22,220
Ed ecco un'altra regola correlata che è stata già discussa ma è inclusa qui solo per

17
00:01:22,220 --> 00:01:23,560
motivi di completezza.

18
00:01:23,600 --> 00:01:30,860
La regola usa lo stesso lock quando si custodisce la stessa variabile mutabile condivisa che non ha una variabile usando un

19
00:01:30,870 --> 00:01:35,440
lock in un posto e usando un altro lock in qualche altro posto.

20
00:01:36,950 --> 00:01:40,510
Ed ecco un esempio che abbiamo usato quando abbiamo discusso di questa regola.

21
00:01:40,550 --> 00:01:46,130
Quindi, ancora una volta è l'esempio del conto bancario e abbiamo la marca sincronizzata che non

22
00:01:46,130 --> 00:01:53,180
importa e abbiamo anche un altro metodo chiamato deposito che utilizza un blocco sincronizzato e sta proteggendo la stessa variabile

23
00:01:53,180 --> 00:01:55,950
di equilibrio appena sommata mentre viene creata.

24
00:01:56,330 --> 00:02:02,210
Non un metodo sincronizzato effettua il ritiro poiché non utilizziamo il blocco dell'oggetto del conto bancario.

25
00:02:02,360 --> 00:02:06,110
Questo è il blocco dell'oggetto su cui è stato richiamato il metodo.

26
00:02:06,530 --> 00:02:12,810
Tuttavia, il metodo di deposito utilizza un oggetto stringa o France come blocco e ciò non dovrebbe essere fatto.

27
00:02:13,070 --> 00:02:19,070
Quindi vengono utilizzati due blocchi diversi per proteggere la stessa variabile che viene condivisa tra i due.

28
00:02:19,250 --> 00:02:21,790
Quindi l'effetto della sincronizzazione è perso.

29
00:02:21,980 --> 00:02:27,890
Quello è John che le minacce anonime possono usare simultaneamente la roba sincronizzata e l'esito non può

30
00:02:27,890 --> 00:02:29,300
essere come desiderato.

31
00:02:29,770 --> 00:02:36,050
No, quando discutiamo di questo esempio prima non abbiamo discusso della visibilità della memoria al momento opportuno.

32
00:02:36,280 --> 00:02:42,310
Almeno accade prima che la relazione non esista tra le due azioni che stanno usando

33
00:02:42,310 --> 00:02:49,730
cammini diversi e le azioni che sono invocazioni di rendere Mithal e depositare da due thread diversi contemporaneamente a causa

34
00:02:50,990 --> 00:02:51,910
di questo.

35
00:02:51,970 --> 00:02:55,060
Mi piacciono le persone e contrasta il problema dell'abilità della memoria.

36
00:02:56,900 --> 00:03:03,980
Ecco un'altra regola che dice se un metodo di modifica è statico, devi sincronizzare l'accesso a questo campo anche

37
00:03:03,980 --> 00:03:08,640
se la materia è in genere usata solo da un singolo thread.

38
00:03:09,540 --> 00:03:15,570
La cosa da notare qui è che il tuo codice potrebbe accedere alla creazione di un singolo thread.

39
00:03:15,980 --> 00:03:23,340
Mondo questo è un campo statico e ci sarà solo una singola JVM di parti di Beauchesne e in un'applicazione

40
00:03:23,340 --> 00:03:30,090
vettoriale come l'ambiente vediamo come tonnellate di utenti che accedono al sistema contemporaneamente sotto suppliche di minacce e gli

41
00:03:30,090 --> 00:03:34,750
utenti di Windows dovrebbero avere una visione coerente di quell'area statica .

42
00:03:35,190 --> 00:03:41,880
OK, quindi il feed statico sarà accessibile da tutti quei thread diversi otterrà la stessa vista

43
00:03:41,880 --> 00:03:42,360
statica.

44
00:03:42,660 --> 00:03:48,810
Quindi, anche se si accede al campo statico da un singolo thread aspart, si progetta il framework

45
00:03:48,960 --> 00:03:54,930
sottostante che è l'applicazione web e il varment potrebbe ancora essere multithread e quindi è necessario essere

46
00:03:54,930 --> 00:03:56,710
consapevoli di questo fatto.

47
00:03:57,060 --> 00:04:04,150
Quindi dovremmo seguire questa regola e la regola successiva è sincronizzare solo ciò che è necessario.

48
00:04:04,580 --> 00:04:08,070
Quindi raccomanda di mantenere il blocco sincronizzato piccolo.

49
00:04:08,120 --> 00:04:10,580
In questo modo riduciamo al minimo il tempo di attesa.

50
00:04:10,670 --> 00:04:15,960
Quali altri thread sono sospesi a causa della mancata disponibilità del blocco.

51
00:04:15,980 --> 00:04:21,260
Inoltre, se ci sono attività che richiedono tempo nei blocchi sincronizzati, dovresti vedere

52
00:04:21,260 --> 00:04:27,560
se possono essere spostati fuori dalla scatola sincronizzata, ma senza compromettere la loro sicurezza è importante.

53
00:04:29,380 --> 00:04:36,490
La prossima regola è la voce da 6 a 7 della mia copia di Java, che è una vasta distesa di sincronizzazione.

54
00:04:36,490 --> 00:04:42,200
Il motivo è che ci sono alcuni costi associati alla sincronizzazione per rivederne alcuni.

55
00:04:42,280 --> 00:04:46,470
La ragione è che il processo di sospensione e ripresa x è costoso.

56
00:04:46,540 --> 00:04:53,380
Se ne è già a conoscenza, vi sono anche alcuni costi associati all'acquisizione e al rilascio

57
00:04:53,390 --> 00:05:01,150
dei blocchi, anche se è meno costoso rispetto alla terza sospensione in Sospensione ora con più thread che condividono

58
00:05:01,150 --> 00:05:02,440
più dati.

59
00:05:02,440 --> 00:05:09,490
Abbiamo bisogno di garantire che ci sia il diritto nel registro in azione per una visibilità coerente della memoria.

60
00:05:09,490 --> 00:05:18,300
Quindi ciò influenzerebbe le prestazioni di tutta la nostra sincronizzazione e lamenta la capacità di Gilliam di eseguire

61
00:05:18,390 --> 00:05:20,220
l'ottimizzazione del codice.

62
00:05:20,310 --> 00:05:27,030
Sappiamo che il decompilatore G-Ride gioca un ruolo nel migliorare le prestazioni in fase di esecuzione su

63
00:05:27,050 --> 00:05:31,190
una delle cose che fa si parla di sollevamento.

64
00:05:31,310 --> 00:05:37,430
Ad esempio, è possibile richiamare questa parte di codice dall'esempio del thread di stop durante

65
00:05:37,850 --> 00:05:44,690
la discussione su Alberti. L'esempio riguardava il thread principale che interrompeva un secondo thread che aveva questo ciclo

66
00:05:44,690 --> 00:05:51,230
y sul thread principale che tentava di avviare il secondo thread impostando il arresta l'arresto variabile come

67
00:05:51,230 --> 00:05:53,810
variabile mutabile condivisa tra le co-dirette.

68
00:05:53,870 --> 00:06:01,430
Ora in assenza di sincronizzazione o la variabile di stop non viene dichiarata come volatile discord potrebbe essere ottimizzata

69
00:06:01,430 --> 00:06:09,720
in questo modo dal compilatore JRD e questo processo è noto come hosting che ha avuto lo stop disponibile si dice

70
00:06:09,840 --> 00:06:17,060
che sia sollevato dal ciclo while non è fermo modificato all'interno del ciclo sul lavoro del motore a causa

71
00:06:17,100 --> 00:06:24,870
della mancanza di sincronizzazione o poiché la variabile non è un decompilatore Jerry o semplicemente ha assunto che nessun altro

72
00:06:24,870 --> 00:06:27,660
thread cambierà anche il suo valore.

73
00:06:27,690 --> 00:06:33,990
Quindi, quale modalità di sicurezza o variabile fuori dal ciclo e il codice risultante verranno interrotti più velocemente perché c'è

74
00:06:33,990 --> 00:06:35,250
meno lavoro da fare.

75
00:06:35,430 --> 00:06:42,360
OK, perché abbiamo solo la squadra attuale al posto di quella variabile, perché il secondo thread verrebbe eseguito

76
00:06:42,360 --> 00:06:47,550
per sempre anche se stop era impostato su true dal thread principale.

77
00:06:48,910 --> 00:06:56,730
E questo tipo di situazione viene definito fallimento di Libano poiché il programma non è in grado di fare progressi.

78
00:06:57,470 --> 00:07:05,000
Non il sollevamento della frizione è quasi certamente fatto su aree server che sono tipicamente installate su invii

79
00:07:05,840 --> 00:07:13,100
su macchine client che raddoppiamo o usiamo installeremo la JVM del client che è JDK e non

80
00:07:13,100 --> 00:07:15,570
eseguono questo genere di ottimizzazioni.

81
00:07:16,130 --> 00:07:24,110
Se si desidera associare DBMS per eseguire anche tale ottimizzazione, è possibile specificare l'opzione server hyphens sulla

82
00:07:24,110 --> 00:07:28,060
riga di comando durante l'esecuzione di GBM.

83
00:07:28,220 --> 00:07:35,630
Infine la sincronizzazione significa accesso seriale e quindi perdiamo opportunità per il parallelismo nei sistemi

84
00:07:35,630 --> 00:07:36,390
multi-core.

85
00:07:37,210 --> 00:07:45,010
Quindi non dovremmo fare attenzione a non sincronizzare sempre la registrazione Significa che se non sei sicuro se

86
00:07:45,010 --> 00:07:51,540
sincronizzare o meno non sincronizzare ma Dokument che la classe non è la risposta.

87
00:07:51,670 --> 00:07:53,310
In questo modo se necessario.

88
00:07:53,410 --> 00:07:58,720
È possibile sincronizzare il buffer di stringa Nalley aggiuntivo più avanti in questa linea guida.

89
00:07:58,860 --> 00:08:06,120
È stato rilevato che le istanze del buffer di stringa venivano utilizzate principalmente da singole minacce,

90
00:08:06,120 --> 00:08:13,120
ovvero non sono condivise su thread differenti in cui la classe utilizza la sincronizzazione internamente

91
00:08:13,210 --> 00:08:16,190
ovunque sia necessaria e le prestazioni.

92
00:08:16,420 --> 00:08:23,150
E questo è stato il motivo per cui il costruttore di stringhe Java 5 è stato intervistato in quanto un calo nel generatore di

93
00:08:24,060 --> 00:08:28,370
stringhe stringa di stringa di sostituzione non utilizza alcuna sincronizzazione, quindi è più veloce.

94
00:08:28,800 --> 00:08:33,380
Ma se è necessaria la sincronizzazione, è possibile utilizzare un buffer di stringa.

95
00:08:33,550 --> 00:08:34,840
Quindi questo è tutto.

96
00:08:34,880 --> 00:08:39,250
E abbiamo esaminato alcune linee guida molto importanti sull'utilizzo della sincronizzazione.

97
00:08:39,420 --> 00:08:39,810
Grazie.
