ArrayList.IsSynchronized プロパティ
定義
public:
virtual property bool IsSynchronized { bool get(); };
public virtual bool IsSynchronized { get; }
member this.IsSynchronized : bool
Public Overridable ReadOnly Property IsSynchronized As Boolean
プロパティ値
true
へのアクセスが同期されている (スレッド セーフである) 場合は ArrayList 。それ以外の場合は false
。true
if access to the ArrayList is synchronized (thread safe); otherwise, false
. 既定値は、false
です。The default is false
.
実装
例
次のコード例は、列挙体全体の中で SyncRoot を使用してコレクションをロックする方法を示しています。The following code example shows how to lock the collection using the SyncRoot during the entire enumeration.
ArrayList^ myCollection = gcnew ArrayList();
bool lockTaken = false;
try
{
Monitor::Enter(myCollection->SyncRoot, lockTaken);
for each (Object^ item in myCollection);
{
// Insert your code here.
}
}
finally
{
if (lockTaken)
{
Monitor::Exit(myCollection->SyncRoot);
}
}
ArrayList myCollection = new ArrayList();
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
Dim myCollection As New ArrayList()
SyncLock myCollection.SyncRoot
For Each item As Object In myCollection
' Insert your code here.
Next item
End SyncLock
このプロパティの値の取得は @no__t 0 操作です。Retrieving the value of this property is an O(1)
operation.
次のコード例では、ArrayList を同期し、@no__t が同期されているかどうかを判断し、同期された ArrayList を使用する方法を示します。The following code example shows how to synchronize an ArrayList, determine if an ArrayList is synchronized and use a synchronized ArrayList.
using namespace System;
using namespace System::Collections;
int main()
{
// Creates and initializes a new ArrayList instance.
ArrayList^ myAL = gcnew ArrayList;
myAL->Add( "The" );
myAL->Add( "quick" );
myAL->Add( "brown" );
myAL->Add( "fox" );
// Creates a synchronized wrapper around the ArrayList.
ArrayList^ mySyncdAL = ArrayList::Synchronized( myAL );
// Displays the sychronization status of both ArrayLists.
String^ szRes = myAL->IsSynchronized ? (String^)"synchronized" : "not synchronized";
Console::WriteLine( "myAL is {0}.", szRes );
String^ szSyncRes = mySyncdAL->IsSynchronized ? (String^)"synchronized" : "not synchronized";
Console::WriteLine( "mySyncdAL is {0}.", szSyncRes );
}
/*
This code produces the following output.
myAL is not synchronized.
mySyncdAL is synchronized.
*/
using System;
using System.Collections;
public class SamplesArrayList {
public static void Main() {
// Creates and initializes a new ArrayList.
ArrayList myAL = new ArrayList();
myAL.Add( "The" );
myAL.Add( "quick" );
myAL.Add( "brown" );
myAL.Add( "fox" );
// Creates a synchronized wrapper around the ArrayList.
ArrayList mySyncdAL = ArrayList.Synchronized( myAL );
// Displays the sychronization status of both ArrayLists.
Console.WriteLine( "myAL is {0}.", myAL.IsSynchronized ? "synchronized" : "not synchronized" );
Console.WriteLine( "mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized" );
}
}
/*
This code produces the following output.
myAL is not synchronized.
mySyncdAL is synchronized.
*/
Imports System.Collections
Public Class SamplesArrayList
Public Shared Sub Main()
' Creates and initializes a new ArrayList.
Dim myAL As New ArrayList()
myAL.Add("The")
myAL.Add("quick")
myAL.Add("brown")
myAL.Add("fox")
' Creates a synchronized wrapper around the ArrayList.
Dim mySyncdAL As ArrayList = ArrayList.Synchronized(myAL)
' Displays the sychronization status of both ArrayLists.
Dim str As String
If myAL.IsSynchronized Then
str = "synchronized"
Else
str = "not synchronized"
End If
Console.WriteLine("myAL is {0}.", str)
If mySyncdAL.IsSynchronized Then
str = "synchronized"
Else
str = "not synchronized"
End If
Console.WriteLine("mySyncdAL is {0}.", str)
End Sub
End Class
' This code produces the following output.
'
' myAL is not synchronized.
' mySyncdAL is synchronized.
注釈
@No__t 0 のスレッドセーフを保証するには、すべての操作を、Synchronized メソッドによって返されるラッパーを介して行う必要があります。To guarantee the thread safety of the ArrayList, all operations must be done through the wrapper returned by the Synchronized method.
コレクションの列挙は、本質的にスレッド セーフなプロシージャではありません。Enumerating through a collection is intrinsically not a thread-safe procedure. コレクションの同期がとられている場合でも、別のスレッドによってそのコレクションを変更できるため、変更の結果として列挙子は例外をスローします。Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. 列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.