我在上海乐字节学习java的第十一天(持续更新中)

56 阅读4分钟

  1. 对文件进行分类管理(当类文件名相同时)

  2. 对类提供多层命名空间

  3. 写在程序文件的第一行

  4. 类名的全程是报名.类名

  5. 包也是一种封装形式

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包

![](https://i0.hdslb.com/bfs/article/6b8bda896596b09b1a7dafb29378d1052f6387b6.png)
![](https://i0.hdslb.com/bfs/article/081c4e9beea7d6ab431a91296e0301475415b778.png)
![](https://i0.hdslb.com/bfs/article/2273bff45225bc74c7b180dfe0ceb89422c7bd15.png)

选取主类

![](https://i0.hdslb.com/bfs/article/f973487d9c008a107be8992e0b1a1d69eeadd505.png)

多线程

进程:正在进行中的程序。(当然这么说太直接了)

![](https://i0.hdslb.com/bfs/article/57210af354d58d5121bf4174c2c0dbf1bba3adc4.png)

线程:就是进程中一个负责程序执行的控制单元。(执行路径)

一个进程中可以有多个线程,称为多线程。

开启多个线程是为了同时运行多个代码,每一个线程都有自己运行的代码,这个内容可以称为线程要执行的任务。

多线程存在哪些弊端? 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

![](https://i0.hdslb.com/bfs/article/ddafa68ba48ef2dc99692b9a738d19df0065864d.png)

这个方法返回的是线程所属于的线程组,并不是正在执行的线程。

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

![](https://i0.hdslb.com/bfs/article/1cca04a712729e3e1eeb6c9b8fd604651dd606f3.png)

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