包
- 对文件进行分类管理(当类文件名相同时)
- 对类提供多层命名空间
- 写在程序文件的第一行
- 类名的全程是报名.类名
- 包也是一种封装形式
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);
}
}
}
<<<
d1`
`0
d1`
`1
d1`
`2
d1`
`3
d1`
`4
d1`
`5
d1`
`6
d1`
`7
d1`
`8
d1`
`9
d2`
`0
d2`
`1
d2`
`2
d2`
`3
d2`
`4
d2`
`5
d2`
`6
d2`
`7
d2`
`8
d2`
`9
创建线程
创建线程的第一种方式:
- 定义一个类继承Thread类
- 覆盖run方法
- 启动线程对象的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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。