clone()方法负责建立正确的存储容量,并通过“按位复制”将 二进制位从原始对象中复制到新对象的存储空间

Thread

方法1:继承thread类,但是不能继承其他类,可扩展性低

public class SimpleThread extends Thread { private int countDown = 5;private intthreadNumber;private static int threadCount = 0; publicSimpleThread() {

threadNumber= ++threadCount;

System.out.println("Making " +threadNumber); }public void run() { //执行函数

while(true) {

System.out.println("Thread " + threadNumber + "(" + countDown + ")");if(--countDown == 0) return; }

}public static voidmain(String[] args) {for(int i = 0; i < 5; i++)new SimpleThread().start();//调用start

System.out.println("All Threads Started"); }

}///:~

方法2:实现Runnable接口

public class MyThread implementsRunnable {public voidrun() {

System.out.println("I'm running!");

}

}

MyThread tt = new MyThread();

Thread t = new Thread(tt);

t.start();

线程的状态(State)

新生状态(New): 当一个线程的实例被创建即使用new关键字和Thread类或其子类创建一个线程对象后,此时该线程处于新生(new)状态,处于新生状态的线程有自己的内存空间,但该线程并没有运行,此时线程还不是活着的(not alive);

就绪状态(Runnable): 通过调用线程实例的start()方法来启动线程使线程进入就绪状态(runnable);处于就绪状态的线程已经具备了运行条件,但还没有被分配到CPU即不一定会被立即执行,此时处于线程就绪队列,等待系统为其分配CPCU,等待状态并不是执行状态; 此时线程是活着的(alive);

运行状态(Running): 一旦获取CPU(被JVM选中),线程就进入运行(running)状态,线程的run()方法才开始被执行;在运行状态的线程执行自己的run()方法中的操作,直到调用其他的方法而终止、或者等待某种资源而阻塞、或者完成任务而死亡;如果在给定的时间片内没有执行结束,就会被系统给换下来回到线程的等待状态;此时线程是活着的(alive);

阻塞状态(Blocked):通过调用join()、sleep()、wait()或者资源被暂用使线程处于阻塞(blocked)状态;处于Blocking状态的线程仍然是活着的(alive)

死亡状态(Dead):当一个线程的run()方法运行完毕或被中断或被异常退出,该线程到达死亡(dead)状态。此时可能仍然存在一个该Thread的实例对象,当该Thready已经不可能在被作为一个可被独立执行的线程对待了,线程的独立的call stack已经被dissolved。一旦某一线程进入Dead状态,他就再也不能进入一个独立线程的生命周期了。对于一个处于Dead状态的线程调用start()方法,会出现一个运行期(runtime exception)的异常;处于Dead状态的线程不是活着的(not alive)。

Ø线程的方法(Method)、属性(Property)

1)优先级(priority)

每个类都有自己的优先级,一般property用1-10的整数表示,默认优先级是5,优先级最高是10;优先级高的线程并不一定比优先级低的线程执行的机会高,只是执行的机率高;默认一个线程的优先级和创建他的线程优先级相同;

2)Thread.sleep()/sleep(long millis)

当前线程睡眠/millis的时间(millis指定睡眠时间是其最小的不执行时间,因为sleep(millis)休眠到达后,无法保证会被JVM立即调度);sleep()是一个静态方法(static method) ,所以他不会停止其他的线程也处于休眠状态;线程sleep()时不会失去拥有的对象锁。 作用:保持对象锁,让出CPU,调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留一定的时间给其他线程执行的机会;

3)Thread.yield()

让出CPU的使用权,给其他线程执行机会、让同等优先权的线程运行(但并不保证当前线程会被JVM再次调度、使该线程重新进入Running状态),如果没有同等优先权的线程,那么yield()方法将不会起作用。

4)thread.join()

使用该方法的线程会在此之间执行完毕后再往下继续执行。

5)object.wait()

当一个线程执行到wait()方法时,他就进入到一个和该对象相关的等待池(Waiting Pool)中,同时失去了对象的机锁—暂时的,wait后还要返还对象锁。当前线程必须拥有当前对象的锁,如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常,所以wait()必须在synchronized block中调用。

6)object.notify()/notifyAll()

唤醒在当前对象等待池中等待的第一个线程/所有线程。notify()/notifyAll()也必须拥有相同对象锁,否则也会抛出IllegalMonitorStateException异常。

7)Synchronizing Block

Synchronized Block/方法控制对类成员变量的访问;Java中的每一个对象都有唯一的一个内置的锁,每个Synchronized Block/方法只有持有调用该方法被锁定对象的锁才可以访问,否则所属线程阻塞;机锁具有独占性、一旦被一个Thread持有,其他的Thread就不能再拥有(不能访问其他同步方法),方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。

synchronized

一在任何时刻,只可有一个线程调用特定对象的一个 synchronized方法。

synchronized方法: synchronized void f() { /* ... */ }

每个对象都包含了一把锁(也叫作“监视器”),它自动成为对象的一部分(不必为此写任何特殊的代 码)。

调用任何synchronized方法时,对象就会被锁定,不可再调用那个对象的其他任何synchronized方法.

synchronized代码块

synchronized(syncObject) {

// This code can be accessed by on ly

// one thread at a time, assuming all

// threads respect syncObject's lock

}

在能进入同步块之前,必须在 synchObject 上取得锁。如果已有其他线程取得了这把锁,块便不能进入,必

须等候那把锁被释放

wait, notify, notifyAll

public classcoffee {publiccoffee(){

String lock= "lock";

mythread my= new mythread(lock, 1);

mythread my1= new mythread(lock, 2);

runthread run= new runthread(lock, 1);

my.start();

my1.start();

Thread thread= newThread(run);try{

Thread.sleep(1000);

}catch(InterruptedException ex) {

Logger.getLogger(coffee.class.getName()).log(Level.SEVERE, null, ex);

}

thread.start();

}

}class mythread extendsThread{

String lock;intithread;public mythread(String lock, inti){this.lock =lock;this.ithread =i;

}public voidrun(){

String s= "Run mythread "+this.ithread;

System.out.println(s);synchronized(lock){try{

s= "mythread "+this.ithread +" wait";

System.out.println(s);

lock.wait();

s= "mythread "+this.ithread +" going on";

System.out.println(s);//lock.notify();

} catch(InterruptedException ex) {

Logger.getLogger(mythread.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

}class runthread implementsRunnable{

String lock;intithread;public runthread(String lock, inti){this.lock =lock;this.ithread =i;

}public voidrun(){

String s= "Run runthread "+this.ithread;

System.out.println(s);synchronized(lock){

s= "runthread "+this.ithread +" notify";

System.out.println(s);

lock.notifyAll();//通知所有lock.wait的线程可以继续执行了//lock.notify();随即的一个线程的wait解除

}

}

}

run:

Run mythread 2

Run mythread 1

mythread 2 wait

mythread 1 wait

Run runthread 1

runthread 1 notify

mythread 1 going on

mythread 2 going on

java笔迹比对_[笔迹]java-其他相关推荐

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java是什么格式_是java格式

    错误:编码GBK的不可映射字符的解决办法 最近在重新补javaSE的基础,编辑器编写完代码以后,在控制台运行代码段的时候,出现了以下的错误提示:错误:编码GBK的不可映射字符 在通过查询谷哥和度娘以后 ...

  3. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  4. JAVA redis缓存过期_失效java服务器

    Java 并发/多线程教程--4并发模型 本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平 ...

  5. 广东java工资一般多少_广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少...

    广东java工资待遇,广东java工资一般多少,广东java工资底薪最低多少 首页 > java > 广东java工资待遇 作者:镀金池   发布时间:2018-12-22 11:20 在 ...

  6. java pdf插件下载_免费java pdf控件

    云原生的概念和理论体系非常的完备,but talk is cheap , show me the code ! 但是作为一名程序员,能动手的咱绝对不多BB,虽然talk并不cheap , 能跟不同层次 ...

  7. java 线程组作用_浅析Java中线程组(ThreadGroup类)

    一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...

  8. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

  9. java 是否含有日文_《JAVA编程思想》5分钟速成:第9章(接口)

    第9章 接口 前言: 1.抽象类(abstract class)和接口(interface)有什么异同? 2.抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(n ...

  10. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

最新文章

  1. java的CyclicBarrier使用
  2. 2007年度最具投资价值100强网站揭晓——博客园榜上有名
  3. 网络被屏蔽了怎么办_预埋的网线不够长,怎么办?
  4. 成绩记录薄系统C语言,成绩记录簿C语言版.doc
  5. Gradle Groovy 基础语法 MD
  6. 【起航计划 027】2015 起航计划 Android APIDemo的魔鬼步伐 26 App-Preferences-Preferences from XML 偏好设置界面...
  7. vc2008工程转vc2005
  8. GD32E230开发笔记-GD32E230开发Demo
  9. win下安装nessus
  10. linux 查找内容对应行数,Linux查看文件指定行数内容与查找文件内容
  11. go1.15版本 mod 报An existing connection was forcibly closed by the remote host错误处理
  12. The firefox installs flashplugin for Linux
  13. 微博上面好看的跳舞美女蛮多的,【Python爬虫】采集微博视频数据(附代完整代码)
  14. appstore截屏的制作方法
  15. Python3官方手册中文在线版
  16. 山重水复疑无路,柳暗花明又一村 。
  17. python 模拟键盘鼠标输入_Python模拟键盘输入和鼠标操作
  18. Node.js Async Await in ES7
  19. 【Python学习笔记—保姆版】第四章—关于Pandas、数据准备、数据处理、数据分析、数据可视化
  20. 2013年最忧伤的句子

热门文章

  1. Java实现二叉树的多种遍历
  2. 安徽省太和一中2021高考成绩查询分数,2021届安徽省太和一中高三物理高考二模试题 Word版含答案...
  3. Qt 之进程间通信(TCP/IP)
  4. 如何制作linux iso镜像
  5. 2021-08-10
  6. 博客开张+第1个项目:云云图书馆
  7. Android EventBus使用
  8. Docker系列之常用命令操作手册
  9. linux自动关机取消命令,linux关机命令【使用思路】
  10. 2018年8月24日英语学习