-
两种方法实现线程: 1、继承 Thread 类 class MyThread extends Thread{}; Thread myThread = new MyThread(); 重写run()方法 myThread.start(); 2、实现Runnable类 class MyRunnable implements Runnable{} Thread myRunnable = new Thread(new MyRunnable);//放入一个实例,这里没加name,会自动命名 myRunnable.start(); 3、Thread启动后执行run()方法 4、Thread.currentThread().getName()方法获取当前线程名称查看全部
-
多线程创建概况 相互独立的线程的创建。 使用Runnable接口两个线程查看全部
-
线程中Thread的常用方法:单位是毫秒,可以精确到纳秒 sleep(long millis, int nanos) 线程休眠 millis休眠的时间,单位是毫秒,可以精确到纳秒 join(long millis, int nanos) 调用线程 可以让其它线程等待自己运行,直到结束 static void yield() 当前运行线程释放处理器资源并且重新去竞争处理器资源 static Thread currentThread() 返回当前正在处理器上运行的线程的引用 Java对线程的支持主要体现在Thread(class)和Runnable(interface)之上。两者中共通的方法 public void run(){}为我们提供了线程实际工作执行的代码。查看全部
-
进程与线程 进程:动态性 程序或任务的执行的过程, 持有资源(共享内存,共享文件)和线程(进程是它们的载体) 线程: 系统中最小的执行单元,同一进程中有多个线程。线程共享线程的资源 线程交互:即线程通信 线程间存在同步和互斥(方式) 进程:1.程序的执行过程;2.持有资源(内存和共享文件)和线程 线程是系统中最小的执行单元。 线程的交互:1.互斥(争用资源);2.同步(消息的同步)查看全部
-
进程与线程 两种方法实现线程: 1、继承 Thread 类 class MyThread extends Thread{}; Thread myThread = new MyThread(); myThread.start(); 2、实现Runnable类 class MyRunnable implements Runnable{} Thread myRunnable = new Thread(new MyRunnable); myRunnable.start(); 3、Thread启动后执行run()方法 4、Thread.currentThread().getName()方法获取当前线程名称查看全部
-
线程与进程2查看全部
-
进程与线程 进程:动态性 程序或任务的执行的过程, 持有资源(共享内存,共享文件)和线程(进程是它们的载体) 线程: 系统中最小的执行单元,同一进程中有多个线程。线程共享线程的资源 线程交互:即线程通信 线程间存在同步和互斥(方式) 进程:1.程序的执行过程;2.持有资源(内存和共享文件)和线程 线程是系统中最小的执行单元。 线程的交互:1.互斥(争用资源);2.同步(消息的同步)查看全部
-
格式输出 System.out.printf("从d%转移到%10.2f单位能量到%d".from,amount,to);查看全部
-
yield()本线程暂停,等待其他线程运行。 join()本线程运行,等待本线程结束。查看全部
-
eclipse快捷键ctrl+e调出菜单查看全部
-
runnable 方法没有getname()方法,所有要Thread.currentThread().getName();查看全部
-
Java中的线程查看全部
-
同步是两个线程之间的一种交互的操作(一个线程发出消息另外一个线程响应)。 同步的实现:wait();notify();notifyAll();这三个方法都是属于Java中的Object对象的成员函数。 调用wait();和notifyAll();方法使线程进入等待或者唤醒不是在同一个线程的同一次操作中执行的,当操作结束,唤醒了所有的等待线程之后,线程又将有着公平的机会竞争CPU资源。 注意:notify();方法唤醒wait set 中的一条线程使其具有竞争CPU的机会,具体唤醒那一条线程是随机的由Java的底层算法决定,我们不能去控制。 通过synchronized关键字为临界区(critical)加锁,这样在线程竞争资源时,当某一条线程获得锁进入临界区后,其他线程将无法再次获取锁进入临界区(critical),直到获得锁的线程退出临界区(critical),释放锁资源。Java的语法保证了同一时间只能有一条线程可以获得lockObject。查看全部
-
synchronized关键字实现互斥行为,既可以出现在方法体之上也可以出现在方法体内,以一种块的形式出现。 然后通过lockObject的wait方法(注意:wait的线程被存放在wait set 中)和notifyAll方法实现同步。 步骤: 1.互斥:同一时间,只能有一个线程访问数据 2.同步:通信机制;一个线程完成,以某种方式通知其他线程 3.锁的概念:private final Object lockObj = new Object(); 4.互斥实现方式:synchronized关键字 synchronized(lockObj){---执行代码----}加锁操作 lockObj.wait();线程等待状态,以避免线程持续申请锁,不去竞争cpu资源 lockObj.notifyAll();唤醒所有lockObj对象上等待的线程查看全部
-
如何正确停止线程 一、错误一:stop()方法 1、not stop:stop()方法会使线程戛然而止 2、使程序突然中止,无法完成完整的业务步骤,也无法进行清理工作 二、错误二:interrupt()方法 1、interrupt()方法只能设置interrupt标志位(且在线程阻塞情况下,标志位会被清除,更无法设置中断标志位),无法停止线程 三、正确方法:设置退出标志 1、使用退出标志位来停止while循环 2、完成最后一次业务后跳出while循环后,之后进行一些清理工作 在异常抛出之前,线程刚好执行了Thread.sleep(1000); 然后在主线程main中就是休眠的这一秒中继续执行了thread.interrupt(); 因为thread是在休眠之中的,所以在 try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } 中抛出了异常,也就是说这时候的因为sleep中采用的interrupt()中断方法已经被处理了,就是理解为回归正常, 所以以后的isInterrupt()方法判断的都是没有中断的了,就是返回false。因为它再次循环就是在执行了异常之后,所以此时isInterrupt()都返回false查看全部
举报
0/150
提交
取消