Разница между синхронизированными и мьютексами в Java [duplicate]

Главный ответ отличный. Вот что я должен был на обычной установке debian / php / mysql:

// storage
// debian. apparently already utf-8

// retrieval
// the mysql database was stored in utf-8, 
// but apparently php was requesting iso. this worked: 
// ***notice "utf8", without dash, this is a mysql encoding***
mysql_set_charset('utf8');

// delivery
// php.ini did not have a default charset, 
// (it was commented out, shared host) and
// no http encoding was specified in the apache headers.
// this made apache send out a utf-8 header
// (and perhaps made php actually send out utf-8)
// ***notice "utf-8", with dash, this is a php encoding***
ini_set('default_charset','utf-8');

// submission
// this worked in all major browsers once apache
// was sending out the utf-8 header. i didnt add
// the accept-charset attribute.

// processing
// changed a few commands in php, like substr,
// to mb_substr

, которая была всем!

19
задан Craig 4 June 2013 в 02:10
поделиться

3 ответа

  1. Существует также ключевое слово volatile, в соответствии с http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html volatile доступ к переменной более эффективный, чем доступ к этим переменным через синхронизированный код
  2. java.util.concurrent.Semaphore, используется для ограничения количества потоков, которые могут обращаться к ресурсу. То есть, в то время как synchronized позволяет только одному потоку захватывать блокировку и выполнять синхронизированный блок / метод, Семафор дает разрешение до n потоков, чтобы идти и блокировать другие.
8
ответ дан Evgeniy Dorofeev 25 August 2018 в 13:24
поделиться

Синхронизировано позволяет только одному потоку выполнения обращаться к ресурсу одновременно. Семафор позволяет до n (вы можете выбрать n) потоков выполнения для доступа к ресурсу в одно и то же время.

36
ответ дан Marichyasana 25 August 2018 в 13:24
поделиться

Существует также атомика . Это дает доступ к базовой аппаратной команде сравнения и замены, которая является основой всей синхронизации. Это позволяет вам, например, безопасно увеличивать число. Если вы ++ поле volatile, другой поток, выполняющий ту же самую команду, может прочитать поле до того, как ваш поток будет записывать на него, а затем напишите ему после вашего потока. Таким образом, один прирост теряется.

На самом деле, летучие, синхронизированные операторы, и атомиты имеют тенденцию заставлять все данные потоков обновляться из основной памяти и / или записывается в основную память, если это необходимо, поэтому ни один из них действительно не работает на низком уровне. (Я упрощаю здесь. В отличие от C #, Java действительно не имеет понятия «основная память».)

2
ответ дан RalphChapin 25 August 2018 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: