As we all know,a thread is a separate process on your computer.you can run multiple threads all at the same time.

multi-threaded code has the disadvantage of becoming quite complex very quickly,although java has some great classes for dealing

with multithreading and simplifying it.

Today we will just look at creating threads,along with using anonymous classes to simplify(or some would say,complexify)your code.

there are two methods to Creating Threads in Java

the first way is to extend the Thread class, override the run() method with the code you want to execute,

then create a new object from your class and call start().

the second method is to pass an implementation of the Runnable interface to the constructor of Thread,

then call start().

we will look at both of the method in turn.

1.Extending the Thread Class

the sample code ad bellow:

public class Worker extends Thread {

	@Override
public void run() { // Loop for ten iterations. for(int i=0; i<10; i++) {
System.out.println(i + " looping ..."); // Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// Interrupted exception will occur if
// the Worker object's interrupt() method
// is called. interrupt() is inherited
// from the Thread class.
break;
}
}
} }

As shown above, we have create a Worker class that extends Thread. And override the run() Method and put some code

in it. The code just loops repeatedly and outputs a method.

we've also used a static method of the thread class,sleep().

note:if you use sleep,you should have to catch InterruptedException.

In the code below,we create two worker class and call their inherited start() methods, both run at the same time,not one after the other

public class Application {

	public static void main(String[] args) {
Worker worker1 = new Worker();
worker1.start(); Worker worker2 = new Worker();
worker2.start(); // You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
} }

screenshot as below:

0 looping ...
0 looping ...
1 looping ...
1 looping ...
2 looping ...
2 looping ...
3 looping ...
3 looping ...
4 looping ...
4 looping ...
5 looping ...
5 looping ...
6 looping ...
6 looping ...
7 looping ...
7 looping ...
8 looping ...
8 looping ...
9 looping ...
9 looping ...

the start() method, inherited from the parent Thread class, creates a new thread and runs whatever code is in run() in the new thread.

if not use the threads:

public class Application {

	public static void main(String[] args) {

		Worker worker1 = new Worker();
worker1.run(); Worker worker2 = new Worker();
worker2.run(); // You can call interrupt() if you want
// to interrupt a thread. The thread itself
// decides how to handle interrupts.
// worker1.interrupt();
} }

result as below:

0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

above code doesn't use multithreading, take twice as long to run.

2.passing code to Thread Directly

the second method of starting a thread is to put the code you want to run in the run method of a class that implements the Runnable interface, then pass it to

the constructor of a thread class

the code below does exactly that;we've put the code all in one file to make it easier to follow.

class CodeRunner implements Runnable {

	@Override
public void run() {
// Loop for ten iterations. for(int i=0; i<10; i++) {
System.out.println(i + " looping ..."); // Sleep for a while
try {
Thread.sleep(200);
} catch (InterruptedException e) {
break;
}
}
} } public class Application { public static void main(String[] args) { CodeRunner runner = new CodeRunner(); Thread thread = new Thread(runner);
thread.start();
} }

result:

0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

we can simplify this code by calling new directly on our coderunner class,right where we create the thread.

Thread thread = new Thread(new CodeRunner());
thread.start();

3.Quick and Dirty Thread using Anonymous Class

in fact we can make this code even terser by creating a new intance of Runnable,sortof,directly in the Thread constructor.

Actually,we can't create a new intance of Runnable because it's an interface; so we can't do the follow:

// Won't work
Thread thread = new Thread(new Runnable());
thread.start();

but we can get this to work if we add in some curly brackets and implement the missing run() method in them.

// This works
Thread thread = new Thread(new Runnable() { @Override
public void run() { } }); thread.start();

of course, to get this code to do anything, we have to add some actual code to run.

Thread thread = new Thread(new Runnable() {

	@Override
public void run() {
for(int i=0; i<10; i++) {
System.out.println(i + " looping ...");
}
} }); thread.start();
0 looping ...
1 looping ...
2 looping ...
3 looping ...
4 looping ...
5 looping ...
6 looping ...
7 looping ...
8 looping ...
9 looping ...

finally,we can make the code ecen more terse, if a little more cryptic,by not bothering to declare a variable to hold the thread class, and then

just calling the stat() method on it directly.

new Thread(new Runnable() {

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

here just to make the code a bit clearer.

if you are also interest in linux and android embed system,please connection with us in QQ group:139761394

Threads and Anonymous Classes in JAVA的更多相关文章

  1. java语言中的匿名类与lambda表达式介绍与总结 (Anonymous Classes and Lambda Expressions)

    2017/6/30 转载写明出处:http://www.cnblogs.com/daren-lin/p/anonymous-classes-and-lambda-expressions-in-java ...

  2. JAVA匿名内部类(Anonymous Classes)

    1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...

  3. Unit Testing of Classes in Java

    Every class can have a main method. That is a handy trick for unit testing of classes. For example, ...

  4. Replacing the deprecated Java JPEG classes for Java 7

    [src: https://blog.idrsolutions.com/2012/05/replacing-the-deprecated-java-jpeg-classes-for-java-7/] ...

  5. Java基础之二十 并发

    20.1 并发得多面性 并发编程令人困惑的一个主要原因:使用并发时需要解决的问题有多个,而实现并发的方法也有多种,并且在这两者之间没有明显的映射关系. 20.1.1 更快的执行 速度问题初听起来很简单 ...

  6. java--线程认识与实例记录 NO.1

    下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用. 主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法. 1.首先 ...

  7. 【Try Kotlin】Kotlin Koans 代码笔记

    Kotlin Koans 心印 Introduction 1.Hello, world! Simple Functions Take a look at function syntax and mak ...

  8. Java8_02_lambda表达式

    一.前言 这一节我们来了解下lambda表达式,主要关注以下几点: 行为参数化 匿名类 Lambda 表达式 方法 引用 二.行为参数化 1.概念 行为参数化(behavior parameteriz ...

  9. Java Inner Classes

    When thinking about inner classes in java, the first thing that comes to my mind is that, WHY do we ...

随机推荐

  1. C/C++中使用的正则表达式库

    正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则引擎主要可以分 ...

  2. KNN算法[分类算法]

    kNN(k-近邻)分类算法的实现 (1) 简介: (2)算法描述: (3) <?php /* *KNN K-近邻方法(分类算法的实现) */ /* *把.txt中的内容读到数组中保存,$file ...

  3. Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)

    Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...

  4. FZU Problem 1686 神龙的难题 重复覆盖

    题目链接 给出大矩形的长宽, 矩形里面有1,0两个值, 给出小矩形的长宽, 求用最少的小矩形覆盖所有的1. 重复覆盖的模板题. #include <iostream> #include & ...

  5. Less基础教程

    Less基础教程 less是较早出现的css预处理器. LESS API 参考 安装和使用 安装比较简单,通过nmp或bower安装即可. npm install less -g bower inst ...

  6. hdu 4034 Graph(逆向floyd)

    floyd的松弛部分是 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);也就是说,g[i][j] <= g[i][k] + g[k][j] (存在i-> ...

  7. java.lang.RuntimeException: Unable to start activity ComponentInfo

    异常:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.william/com.william.Result ...

  8. cocos2d-x Touch 事件应用的一个例子

    1效果图: 这个是<Cocos2d-X by Example Beginner's Guide>上的第一个例子,我稍微重构了下代码.是一个简单的IPad上的双人游戏,把球射入对方的球门就得 ...

  9. Javascript初级学习总结

    首先,在Html页面输出,使用document.write('内容'); <html> <head> <title></title> <scrip ...

  10. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...