我在上海樂位元組學習java的第十一天(持續更新中)

weixin_51578167發表於2020-10-29

對檔案進行分類管理(當類檔名相同時)

對類提供多層名稱空間

寫在程式檔案的第一行

類名的全程是報名.類名

包也是一種封裝形式

package lesson11;//包可以多層巢狀
import java.util.Arrays;//為了簡化類名的書寫

public class test1 {
public static void main(String [] args){
int[] arr=new int[]{1,2,45,4,5,23,7,8};
//列印陣列
String res=Arrays.toString(arr);
System.out.println(res);
//陣列排序
Arrays.sort(arr);
res=Arrays.toString(arr);
System.out.println(res);

}
}

也可以這麼寫

package lesson11;//包可以多層巢狀

public class test1 {
public static void main(String [] args){
int[] arr=new int[]{1,2,45,4,5,23,7,8};
//列印陣列
String res=java.util.Arrays.toString(arr);
System.out.println(res);
//陣列排序
java.util.Arrays.sort(arr);
res=java.util.Arrays.toString(arr);
System.out.println(res);
}
}
<<<
[1, 2, 45, 4, 5, 23, 7, 8]
[1, 2, 4, 5, 7, 8, 23, 45]

結果是一樣的

jar包
Jar :java的壓縮包 我用的是idea下邊演示一下idea怎樣打JAR包

選取主類

多執行緒
程式:正在進行中的程式。(當然這麼說太直接了)

執行緒:就是程式中一個負責程式執行的控制單元。(執行路徑)

一個程式中可以有多個執行緒,稱為多執行緒。

開啟多個執行緒是為了同時執行多個程式碼,每一個執行緒都有自己執行的程式碼,這個內容可以稱為執行緒要執行的任務。

多執行緒存在哪些弊端? windows看起開是同時執行了多工,但是其實不是,只是執行任務切換比較快(時間片),當執行緒太多效率就會降低。

在java虛擬機器中,有一個執行緒在執行主執行緒,還有個一執行緒進行GC,jvm中實現了多執行緒。

package lesson11;

public class test2 {
public static void main(String []args){
new Demo();
new Demo();
System.gc();//呼叫gc,呼叫物件的finalize回收方法
new Demo();
System.out.println(“Hello world”);
}
}

class Demo extends Object{
public void finalize(){
System.out.println(“ok”);
}
}
<<<
ok
Hello world
ok

單執行緒

package lesson11;

public class test2 {
public static void main(String []args){
Demo d1 = new Demo(“d1”);
Demo d2 = new Demo(“d2”);
d1.show();
d2.show();
}
}

class Demo {
private String name;
Demo(String name){
this.name = name;
}
public void show(){
for(int x=0;x<10;x++){
System.out.println(name+""+x); } } } <<< d10
d11 d12
d13 d14
d15 d16
d17 d18
d19 d20
d21 d22
d23 d24
d25 d26
d27 d28
d2````````9

建立執行緒
建立執行緒的第一種方式:

  1. 定義一個類繼承Thread類
  2. 覆蓋run方法
  3. 啟動執行緒物件的start方法

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.start();
b.start();
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+i);
}

}
}
<<<
Thread_a-------0
thread_b-------0
Thread_a-------1
thread_b-------1
Thread_a-------2
thread_b-------2
Thread_a-------3
thread_b-------3
Thread_a-------4
Thread_a-------5
thread_b-------4
Thread_a-------6
Thread_a-------7
thread_b-------5
thread_b-------6
Thread_a-------8
thread_b-------7
thread_b-------8
thread_b-------9
Thread_a-------9

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.run();
b.run();
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+i);
}

}
}
<<<
Thread_a-------0
Thread_a-------1
Thread_a-------2
Thread_a-------3
Thread_a-------4
Thread_a-------5
Thread_a-------6
Thread_a-------7
Thread_a-------8
Thread_a-------9
thread_b-------0
thread_b-------1
thread_b-------2
thread_b-------3
thread_b-------4
thread_b-------5
thread_b-------6
thread_b-------7
thread_b-------8
thread_b-------9

呼叫run方法的話就是正常的呼叫,並沒有使用任務的切換過程。

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.start();
b.start();
System.out.println(“over”);
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+getName());//getname可以獲取執行緒的名字
}
}
}
<<<
over
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
Thread_a-------Thread-0
Thread_a-------Thread-0

兩個子執行緒的執行不影響主程式的巡行執行

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.run();
b.run();
System.out.println(“over”);
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+getName());
}
}
}
<<<
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
Thread_a-------Thread-0
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
thread_b-------Thread-1
over

主函式呼叫run方法應該只有一個執行緒在執行沒什麼呼叫getname還是能顯示Thread-0

這個方法返回的是執行緒所屬於的執行緒組,並不是正在執行的執行緒。

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.run();
b.run();
System.out.println(“over”);
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+Thread.currentThread().getName());//現在正在執行的執行緒
}
}
}
<<<
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
Thread_a-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
thread_b-------main
over

package lesson11;

public class test3 {
public static void main(String [] args){
MyThread a = new MyThread(“Thread_a”);
MyThread b = new MyThread(“thread_b”);
a.start();
b.start();
System.out.println(“over”+Thread.currentThread().getName());
}
}

class MyThread extends Thread{
private String name;
MyThread(String name ){
this.name = name;
}

@Override
public void run() {
for(int i =0;i<10;i++){
System.out.println(name+"-------"+Thread.currentThread().getName());
}
}
}
<<<
overmain
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
Thread_a-------Thread-0
thread_b-------Thread-1
thread_b-------Thread-1

相關文章