多线程,线程同步,synchronized关键字的用法
一、什么是多線程
Java多線程實現方式主要有四種:繼承Thread類、實現Runnable接口、實現Callable接口通過FutureTask包裝器來創建Thread線程、使用ExecutorService、Callable、Future實現有返回結果的多線程。一般主要用前面兩種方法。
1、繼承 Thread 方法 實現多線程
//繼承 Thread 方法 public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } MyThread myThread1 = new MyThread(); MyThread myThread2 = new MyThread(); myThread1.start(); myThread2.start();2、實現Runnable接口方法
1 public class MyThread extends OtherClass implements Runnable { 2 public void run() { 3 System.out.println("MyThread.run()"); 4 } 5 } 6 7 //調用 8 MyThread myThread = new MyThread(); 9 Thread thread = new Thread(myThread); 10 thread.start();?
二、同步機制
- 多線程和異步操作兩者都可以達到避免調用線程阻塞的目的,從而提高軟件的可響應性。甚至有些時候我們就認為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區別的。而這些區別造成了使用多線程和異步操作的時機的區別。
- 線程同步是多個線程同時訪問同一資源,等待資源訪問結束,浪費時間,效率低??? 線程異步:訪問資源時在空閑等待時同時訪問其他資源,實現多線程機制
為何要使用同步??
??? java允許多線程并發控制,當多個線程同時操作一個可共享的資源變量時(如數據的增刪改查),?
??? 將會導致數據不準確,相互之間產生沖突,因此加入同步鎖以避免在該線程沒有完成操作之前,被其他線程的調用,?
??? 從而保證了該變量的唯一性和準確性。
?
三、synchronized關鍵字
? ? ? ?synchronized實現同步主要是同步塊、同步方法實現。
加上它作用就是在多線程訪問時,自動加上鎖,禁止別的線程訪問,直到這個線程訪問才解鎖;
? ? ? ?可以防止多線程修改數據時造成訪問數據不同步
1.同步方法?
??? 即有synchronized關鍵字修飾的方法。?
??? 由于java的每個對象都有一個內置鎖,當用此關鍵字修飾方法時,?
??? 內置鎖會保護整個方法。在調用該方法前,需要獲得內置鎖,否則就處于阻塞狀態。
??? 代碼如:?
??? public synchronized void save(){}
???注: synchronized關鍵字也可以修飾靜態方法,此時如果調用該靜態方法,將會鎖住整個類
?
2.同步代碼塊?
??? 即有synchronized關鍵字修飾的語句塊。?
??? 被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步
??? 代碼如:?
??? synchronized(object){?
??? }
????注:同步是一種高開銷的操作,因此應該盡量減少同步的內容。?
??? 通常沒有必要同步整個方法,使用synchronized代碼塊同步關鍵代碼即可。?
?
轉載于:https://www.cnblogs.com/lemon-flm/p/7551932.html
總結
以上是生活随笔為你收集整理的多线程,线程同步,synchronized关键字的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络对抗作业一
- 下一篇: Window上,启动Tomcat服务之后