【Java学习笔记】线程学习笔记
一、資源
? ?http://blog.csdn.net/axman/article/details/431796
? ?這個博客里有Java多線程、線程池的一系列,從基礎開始就很清楚,牛人
二、重點
? 今天讀到了基礎篇(三),跳過了后面的方法介紹,以后估計還得補上來的....
? 做筆記......
? 1、線程對象和線程
? ? ?線程對象:一個Object類,線程執行形式的封裝
? ? ?線程:真正執行的那什么..
? 2、JVM到底做了什么?
? ? ? "?JVM進程被啟動,在同一個JVM進程中,有且只有一個進程,就是它自己.然后在這個JVM環境中,
所有程序的運行都是以線程來運行.JVM最先會產生一個主線程,由它來運行指定程序的入口點.在這個
程序中,就是主線程從main方法開始運行.當main方法結束后,主線程運行完成.JVM進程也隨之退出.
????我們看到的是一個主線程在運行main方法,這樣的只有一個線程執行程序邏輯的流程我們稱
之為單線程.這是JVM提供給我們的單線程環境,事實上,JVM底層還至少有垃圾回收這樣的后臺線程以
及其它非java線程,但這些線程結我們而言不可訪問,我們只認為它是單線程的."
? 3、并行和并發
? ? 并行:單CPU中,通過調度在線程直接切換
? ? 并發: ?多CPU中,同時讓兩個以上線程同時運行
? ? 疑惑1:我的理解:單行時其實某一時間點上只有一個線程在跑?
? ? 疑惑2:我的理解:等于某個時間點可以有多個線程跑?那系統的進程和線程是什么關系?一個進程類似于一個程序的運行空間,而線程則是進程里的某些任務的執行通道?
? 4、thread.start()
- ? ? ? 你只要調用start()方法,JVM就會管理這個線程對象讓它產生一個線程并注冊到線程處理系統中(線程棧).
- ? ? ? start()方法最本質的功能是從CPU中申請另一個線程空間來執行run()方法中的代碼,它和當前的線程是
? 兩條線,在相對獨立的線程空間運行,也就是說,如果你直接調用線程對象的run()方法,當然也會執行,但
? 那是在當前線程中執行,run()方法執行完成后繼續執行下面的代碼.而調用start()方法后,run()方法的
? 代碼會和當前線程并發(單CPU)或并行(多CPU)執行.? ? ? ? ? - ? ? ? 一個Thread的實例一旦調用start()方法,這個實例的started標記就標記為true,事實中不管這個線程
? 后來有沒有執行到底,只要調用了一次start()就再也沒有機會運行了,這意味著:
? ? [通過Thread實例的start(),一個Thread的實例只能產生一個線程]
? ? ? ? ? ?
public synchronized void start() {if (started)
throw new IllegalThreadStateException();
started = true;
group.add(this);
start0();
}
5、thread(new Runanle()).start()
? ? ??一個Runnable實例給Thread對象多次包裝,我們就可以看到它們實際是在同一實例上啟動線程
? ? ? 例子在資源博客http://blog.csdn.net/axman/article/details/420892中
? ? ? 我的理解:
? ? ? ? 這里很奇怪我覺得,
? ? ? ? ???R?r?=?new?R();
? ? ? ? ?for(int?i=0;i<10;i++) {
? ? ? ? ? ? ?new?Thread(r).start();
? ? ? ? ? }
? ? ? ? 雖然每次都是?new?Thread(r).start(),但是按照博客的說法,應該是在一個線程,那這說明了線程對象和線程的區別,每次新建的線程對象肯定是不一樣的,但是他們啟動的線程是一樣的,是這樣理解的么?
轉載于:https://www.cnblogs.com/hundan/archive/2011/09/04/2166086.html
總結
以上是生活随笔為你收集整理的【Java学习笔记】线程学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业管理软件
- 下一篇: Java——Arrays类操作数组的工具