您好,登錄后才能下訂單哦!
一、當兩個并發線程訪問同一個對象object中的
這個synchronized(this)同步代碼塊時,
一個時間內只能有一個線程得到執行。
另一個線程必須等待當前線程執行完
這個代碼塊以后才能執行該代碼塊。
@SuppressLint("SimpleDateFormat") public class MainActivity extends Activity implements OnClickListener{ private Thread mThraed; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mThraed = new Thread(mRunnable); ((Button)findViewById(R.id.button1)).setOnClickListener(this); ((Button)findViewById(R.id.button2)).setOnClickListener(this); } private Runnable mRunnable = new Runnable(){ @Override public void run() { /** * 線程安全 * 對線程進行加鎖處理 * 線程內的數據處理完畢后,再開鎖 * */ synchronized(mHandler){ while(true){ if(mThraed == null){ break; } try{ Thread.sleep(1000); mHandler.sendEmptyMessage(0x01); }catch(Exception e){ e.printStackTrace(); } } } } }; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case 0x01: refreshUI(); break; default: break; } } }; private void refreshUI(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String date = sdf.format(new Date()); Log.v("result",date); ((TextView)findViewById(R.id.textView1)).setText(date); } @Override public void onClick(View arg0) { if(arg0.getId() == R.id.button1){ if(mThraed == null){ mThraed = new Thread(mRunnable); mThraed.start(); }else{ mThraed = new Thread(mRunnable); mThraed.start(); } } if(arg0.getId() == R.id.button2){ mThraed = null; } } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。